-1

我有这个文本文件,它可能在 Latin1 字符集中包含一些不受支持的字符,这是我的 JVM 的默认字符集。

当我的 java 程序尝试从文件中读取时,这些字符会变成什么?具体来说,假设我在文件中有一个 2 字节长的字符,它是否会被读取为一个字节字符(因为 Latin1 中的每个字符只有 1 字节长)?

谢谢,

4

3 回答 3

3

我不能使用 InputStreaReader 选项,因为必须使用 Latin1 读取文件。

我有这个文本文件,其中可能包含 Latin1 字符集中一些不受支持的字符...

你在这里有矛盾的要求。

该文件要么是 LATIN-1(并且没有“不支持的字符”),要么不是 LATIN-1。如果它不是 LATIN-1,您应该尝试找出它真正的字符集/编码,并使用那个而不是 LATIN-1 来读取文件。

正如其他答案/评论所解释的那样,您可以更改 JVM 的默认字符集,也可以在打开Reader.

我无法设置 JVM 的默认字符集。

请解释您正在尝试什么以及遇到什么问题。

(而且有点害怕搞砸!)

懦夫!:-)


FWIW - 如果您尝试读取(例如)LATIN-1 中的数据流,而数据流实际上不在 LATIN-1 中,那么您可以预期以下内容:

  • 在 LATIN-1 和实际字符集中编码相同的字符将被完好无损地传递。
  • 编码不同的字符将被替换为表示“未知字符”(例如问号)的字符,或者会出现乱码。发生哪种情况取决于该字节或字节序列是否编码有效(但错误)字符,或者根本没有字符。

最终结果将是部分乱码文本。乱码可能是可逆的,也可能不是可逆的,具体取决于真正的字符集和字符是什么。但最好避免“去那里”……首先使用 RIGHT 字符集进行解码。

于 2012-06-04T23:02:24.777 回答
1

首先,您可以指定读取文件时要使用的字符集。参见例如:java.io.InputStreamReader

第二。是的,如果使用 1 字节字符集读取,则每个字节将用于映射到一个字符。

第三:测试它,你将毫无疑问地看到实际发生了什么!

于 2012-06-04T22:48:17.717 回答
0

如果您不知道字符集,您将不得不猜测它。这是棘手且容易出错的。

这是一个关于这个问题的问题: 如何检测文本文件的编码/代码页

看看如何欺骗记事本猜错。

于 2012-06-05T02:45:42.560 回答