0

我正在使用 OS X 上的 Java 平台处理 Unicode 文本文件。当我使用 TextEdit 或 TextWrangler 打开文件而不是看到“Nattvardsgästerna”时,我看到“Nattvardsg‰sterna”(这是不正确的)。当我使用 Java io 流打开文件时,我看到同样不正确的String“Nattvardsg‰sterna”。

当我在 PC 上打开文件时,我看到了正确的字符串。我不知道从哪里开始解决这个问题......这是我的 OS X 设置的问题吗?我应该使用特殊标志打开 Java 流吗?

谢谢。

PS我打开文件是这样的:fileReader = new BufferedReader(new FileReader(file));

PSS 另外,我应该提到我想将结果输出为 SQL 文本文件,因此操作系统正确区分ä很重要。

4

1 回答 1

3

AnInputStream读取字节(不是字符),所以当你说:

当我使用 java io 流打开文件时

...您的真正意思是“当我使用 Java 打开文件时Reader

编辑:您的评论说您正在这样做:

new BufferedReader(new FileReader(file));

AnInputStreamReader有一个构造函数,允许您设置字符编码。如果您不指定一个,它将使用平台默认值。平台默认值不太可能是 unicode(在我的 Macbook 上,它设置为“US-ASCII”)。

为了设置字符编码,您必须创建中间输入流阅读器,而不是FileReader让其为您完成(因为FileReader使用平台默认编码)。

假设文件使用 UTF-8 进行编码,请使用:

new BufferedReader(new InputStreamReader(new FileInputStream(file), 
                                         Charset.forName("UTF-8")));

或者,您可以通过向 JVM 提供参数来更改平台默认值。您可以查看此答案以获取完整的详细信息,但基本思想是您设置file.encodingJava 系统属性。链接的答案提供了几种实现此目的的方法。

进一步编辑:

PSS 另外,我应该提到我想将结果输出为 SQL 文本文件,因此操作系统正确区分 ä 很重要。

操作系统与此无关。文件系统只是四处移动字节。如何解释这些字节完全取决于正在读取这些文件的应用程序。这个答案告诉你如何让你的 Java 程序正确解释字节。为了让您的数据库能够正确解释字节,您需要配置数据库编码。

于 2013-01-18T22:40:37.050 回答