如果我有一个用 ISO 编码的文件,但想使用 java 以 UTF-8 格式读取文件,我还会得到相同的文本吗?
µÃÿ 等特殊字符会显示相同的内容吗?
如果我有一个用 ISO 编码的文件,但想使用 java 以 UTF-8 格式读取文件,我还会得到相同的文本吗?
µÃÿ 等特殊字符会显示相同的内容吗?
不,你不会。UTF-8 不会以与 ISO-8859-1 相同的方式对 U+007f 以外的字符进行编码(ISO-8859-1 将 U+0080 到 U+00ff 编码为单个字节\x80
,\xff
而 UTF-8 对每个字符使用两个字节那些字符)。
打开文件时必须使用显式编码规范:new InputStreamReader(new FileInputStream(...), <encoding>)
简而言之,没有。ISO 中字符的表示方式(按位)与 UTF-8 中字符的表示方式不同。
但是,您可以将文件从 ISO 转换为 UTF-8,但不能将 UTF-8 转换为 ISO,因为 UTF-8 中的可识别字符比 ISO 中的要多得多。
我的建议是检测编码(请参阅:Java:如何确定流的正确字符集编码),然后相应地处理每种情况。