我们应该在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 DateTime 类?

Java 9 中不推荐使用 Observer。我们应该使用啥来代替它?

[转]怎么解决输入流和输出流编码问题

我应该使用啥版本的 Java 来开发我的 MOJO Maven 插件?

邮政编码应该使用啥 html5 表单属性?

在字符编码格式选项里UTF-8(无BOM)是啥意思呀?