我有这个文本文件,它可能在 Latin1 字符集中包含一些不受支持的字符,这是我的 JVM 的默认字符集。
当我的 java 程序尝试从文件中读取时,这些字符会变成什么?具体来说,假设我在文件中有一个 2 字节长的字符,它是否会被读取为一个字节字符(因为 Latin1 中的每个字符只有 1 字节长)?
谢谢,
我有这个文本文件,它可能在 Latin1 字符集中包含一些不受支持的字符,这是我的 JVM 的默认字符集。
当我的 java 程序尝试从文件中读取时,这些字符会变成什么?具体来说,假设我在文件中有一个 2 字节长的字符,它是否会被读取为一个字节字符(因为 Latin1 中的每个字符只有 1 字节长)?
谢谢,
我不能使用 InputStreaReader 选项,因为必须使用 Latin1 读取文件。
和
我有这个文本文件,其中可能包含 Latin1 字符集中一些不受支持的字符...
你在这里有矛盾的要求。
该文件要么是 LATIN-1(并且没有“不支持的字符”),要么不是 LATIN-1。如果它不是 LATIN-1,您应该尝试找出它真正的字符集/编码,并使用那个而不是 LATIN-1 来读取文件。
正如其他答案/评论所解释的那样,您可以更改 JVM 的默认字符集,也可以在打开Reader
.
我无法设置 JVM 的默认字符集。
请解释您正在尝试什么以及遇到什么问题。
(而且有点害怕搞砸!)
懦夫!:-)
FWIW - 如果您尝试读取(例如)LATIN-1 中的数据流,而数据流实际上不在 LATIN-1 中,那么您可以预期以下内容:
最终结果将是部分乱码文本。乱码可能是可逆的,也可能不是可逆的,具体取决于真正的字符集和字符是什么。但最好避免“去那里”……首先使用 RIGHT 字符集进行解码。
首先,您可以指定读取文件时要使用的字符集。参见例如:java.io.InputStreamReader
第二。是的,如果使用 1 字节字符集读取,则每个字节将用于映射到一个字符。
第三:测试它,你将毫无疑问地看到实际发生了什么!