我们应该在java中使用啥编码来读取US7ASCII编码的文件
Posted
技术标签:
【中文标题】我们应该在java中使用啥编码来读取US7ASCII编码的文件【英文标题】:What encoding should we use in java to read files in US7ASCII encoding我们应该在java中使用什么编码来读取US7ASCII编码的文件 【发布时间】:2021-10-24 12:23:50 【问题描述】:我正在尝试使用 java 解析 US7ASCII 文件,使用以下代码:
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, charSetName);
在第 2 行,第二个参数是我需要传递字符集名称的字符集名称。
以下链接提供了 Java 支持的字符集: https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
在那里我找不到任何关于 US7ASCII 的条目。 有人可以帮我确定我应该为 US7ASCII 编码文件传递什么字符集名称。
【问题讨论】:
你试过US-ASCII
吗?
实际上我认为即使是 UTF-8 也适用于
US7ASCII
是 Oracle 所称的 ASCII 字符集。据我所知,设置实际上并不能保证所有数据都是ASCII。换句话说:在某些情况下,它会接受/存储/返回非 ASCII 字符,所以如果你不走运,你得到的 data 实际上可能不是纯 ASCII 数据。如果是这种情况,您将很难解释它,除非您确切知道编码的真正意图(并且它在您的数据库中是一致的,这绝不是保证)。
【参考方案1】:
您应该使用“US-ASCII”,但“ISO-8859-1”或“UTF-8”可能还有一些编码也可以。
名称为“US-ASCII”的Java字符集/编码被定义为
“七位 ASCII,又名 ISO646-US,又名 Unicode 字符集的基本拉丁语块。”
请参阅javadocs 以获取Charset
。
“ISO-8859-1”的前 128 位代码与 7 位 ASCII 代码相同。虽然“UTF-8”是一种可变长度编码,但前 128 个代码与 7 位 ASCII 代码相同。这意味着它们可以读取正确的 7 位 ASCII 文件;即仅包含 7 位代码的那些。 (但如果有杂散的 8 位代码,即 128 到 255 范围内的字节,则可能会出现问题。)
【讨论】:
以上是关于我们应该在java中使用啥编码来读取US7ASCII编码的文件的主要内容,如果未能解决你的问题,请参考以下文章
Java 9 中不推荐使用 Observer。我们应该使用啥来代替它?