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

时间:2017-01-20 13:31:10

标签: java netbeans encoding utf-8 properties

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
<案例2

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

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

在Netbeans中打开它我看到了:

INFO_OEFFNEN=ÐÑкÑÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ
FILE=Файл
SPRACHE=ЯзÑк 

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

enter image description here

<案例3

我和案例2一样,但我在Netbeans中设置了&#34; use project encoding&#34; .properties文件到true的属性。

现在在Netbeans编辑器中,我看到了正确的文字(但是100%标记为&#34;修改了&#34;由SVN)。当我启动App字符串时,如下所示:

enter image description here

问题:

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

我想写一个简短的Java应用程序,它读取.properties文件(由Netbeans创建),添加或替换一些行并创建一个新文件,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 个答案:

答案 0 :(得分: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,其他脚本......)。

答案 1 :(得分:0)

这是因为这一行(见http://wiki.netbeans.org/FaqI18nProjectEncoding):

  

*。属性文件始终使用ISO-8859-1编码加\ uXXXX转义。 (国际字符将在编辑器中本地显示,但存储为磁盘上的转义。)

所以它可能会被迫ISO-8859-1 ...那么也许你做错了,你的.properties 就在{{1} }?

答案 2 :(得分:0)

在这里你可以改变你的属性文件编码,只需将项目编码设置为UTF-8

How to change default encoding in NetBeans 8.0

答案 3 :(得分:-1)

案例1:您的文件不是UTF-8

案例2-3,你的文件应该是UTF-8,但你的应用程序不管理UTF-8显示。

我没有使用Netbeans(你是第一个与我相遇的用户),但我通过一项简单的研究发现了这一点:

  

转到Netbeans home中的etc文件夹 - &gt;打开netbeans.conf文件并在以下行添加netbeans_default_options:

     

-J-指定-Dfile.encoding = UTF-8

     

重新启动Netbeans,它应该是UTF-8