Netbeans - .properties文件默认编码 | 奇怪的行为

4

我在Netbeans中遇到了一个与.properties文件相关的问题。我使用这些文件来为我的应用程序提供一些本地化字符串。

情况1

如果我在Netbeans中创建一个新的.properties文件(New -> Properties File),并在其中添加一些行:

INFO_OEFFNEN=Открыть информацию
FILE=Файл
SPRACHE=Язык

一切运作良好,所有的字符串都已正确翻译:
enter image description here
但是如果我使用Notepad++打开该文件,我会看到以下内容(Notepad++将编码识别为UTF-8,可能不正确):
INFO_OEFFNEN=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e
FILE=\u0424\u0430\u0439\u043b
SPRACHE=\u042f\u0437\u044b\u043a

案例二

如果我使用Notepad++创建一个UTF-8编码的.properties文件,并包含以下行:

INFO_OEFFNEN=Открыть информацию
FILE=Файл
SPRACHE=Язык

当我在Netbeans中打开它时,我看到这个:
INFO_OEFFNEN=ÐÑкÑÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ
FILE=Файл
SPRACHE=ЯзÑк 

在GUI中,我看到了一些非常奇怪的东西:

enter image description here

案例3

我做了与案例2相同的事情,但是在Netbeans中,我将.properties文件的“use project encoding”属性设置为true

现在,在Netbeans编辑器中,我看到了正确的文本(但是被SVN标记为100%“修改”)。当我启动应用程序时,字符串看起来像这样:

enter image description here

问题:

我认为Netbeans创建的属性文件的默认编码不是UTF-8。在这种情况下,我该如何检查Netbeans默认使用哪种编码?

我想编写一个简短的Java应用程序,它读取一个由Netbeans创建的.properties文件,添加或替换一些行,并创建一个新文件,该文件应该被Netbeans正确读取。在InputStreamReader中应该使用哪种编码?

请给我一些关于这个问题的提示。我的有关Netbeans默认编码不同的假设是正确的吗?恐怕我在这里没有理解一些重要的问题。

一些附加信息:

- Netbeans project encoding: UTF-8
- Help->About: 
    *NetBeans IDE 8.1 (Build 201510222201)
    *Java: 1.8.0_92; Java HotSpot(TM) 64-Bit Server VM 25.92-b14
    *System: Windows 7 version 6.1 running on amd64; UTF-8; de_DE (nb)
4个回答

1

在情况1中,您的属性文件是正确的。

根据Oracle的说法,属性文件是使用ISO 8859-1字符编码编写和读取的。 请参见https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html

load(Reader) / store(Writer, String)方法从字符流中以简单的基于行的格式加载和存储属性,如下所述。 load(InputStream) / store(OutputStream, String)方法的工作方式与load(Reader)/store(Writer, String)一对相同,只是输入/输出流采用ISO 8859-1字符编码进行编码。

我的团队中有些开发人员使用Eclipse,但它并不总是自动将属性文件转换为ISO 8859-1编码。因此,显示字符时可能会出现错误。我们使用了一个名为native2ascii-maven-plugin的Maven插件来将这些文件转换为ISO 8859-1编码。请参见https://github.com/mojohaus/native2ascii-maven-pluginhttps://mvnrepository.com/artifact/org.codehaus.mojo/native2ascii-maven-plugin

其他开发人员使用Netbeans(像我一样),Netbeans完全符合Oracle规格。因此,默认情况下,Netbeans会以ISO 8859-1编写属性文件。

所以,有两种可能性:

  • 使用ISO 8859-1编码编写您的属性文件(Netbeans会自动完成)。
  • 或者,使用UTF-8编码编写您的属性文件(Eclipse或Notepad ++默认完成),然后将其转换为ISO 8859-1。避免使用其他工具将ISO 8859-1重新转换为UTF-8(SVN、GIT、其他脚本等)。

0
这是因为这一行(参见http://wiki.netbeans.org/FaqI18nProjectEncoding):
*.properties文件总是使用ISO-8859-1编码加上\uXXXX转义符。(国际字符将在编辑器中以本地方式显示,但在磁盘上存储为转义符。)
所以它可能被强制为ISO-8859-1...那么也许你做错了,你的.properties文件必须ISO-8859-1

0

-1

情况1:您的文件不是UTF-8格式

情况2-3:您的文件应该是UTF-8格式,但您的应用程序无法管理UTF-8显示。

我没有使用Netbeans(您是我遇到的第一个用户),但我通过简单的研究找到了以下方法:

进入Netbeans主目录下的etc文件夹-->打开netbeans.conf文件并在netbeans_default_options中添加以下行:

-J-Dfile.encoding=UTF-8

重新启动Netbeans,它就会以UTF-8格式运行。


谢谢 :) 不幸的是,已经测试过了 - 没有帮助。我担心这不是一个问题。 - radekEm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接