【问题标题】:Spanish character óé display error in Java propertiesJava 属性中的西班牙语字符 óé 显示错误
【发布时间】:2012-01-04 22:26:18
【问题描述】:

当我处理带有西班牙字符óé 的属性文件时,字符显示为?。我尝试了不同的方法来解决这个问题,但仍然失败:

  • 我尝试使用\uxxxx
  • 我尝试将InputStreamReader 与编码UTF-8 一起使用
  • 我尝试将字符串转换为字节,然后从这些字节创建一个新字符串:

    new String( val.getBytes("UTF-8"), "UTF-8")
    

没有任何效果。我接下来应该怎么做才能解决这个问题?日语和俄语还是可以的。

【问题讨论】:

  • 日文和俄文字符是否保存在同一个属性文件中?你究竟是如何在其中指定它们的,你是如何阅读和展示它们的?
  • 不,每种语言都有自己的属性文件。我的意思是messaages_ja_JP.properties、messages_ru_RU.properties 和西班牙语messages_es_ES.properties
  • 您应该确定问题是在加载还是显示字符串。然后提供一个简短但完整的程序来演示该部分。
  • 好吧,这听起来像是文件本身没有使用正确的编码保存,但是 \uXXXX 应该可以工作。能否请您也回答另外两个问题?还有这个新问题:当你把一个日文字符串放在西班牙语包中时怎么样?
  • 好主意。我使用 FileInputStream 来读取文件,然后调用 Properties.load(new InputStreamreader(is, "UTF-8")) 来加载基于语言环境的文件。当我将日文字符复制到西班牙文包时,日文字符转换为'??????'在那个文件中。当我将西班牙语字符复制到日语包时,日语和西班牙语都失败了。

标签: java character-encoding properties-file


【解决方案1】:

属性文件需要采用正确的编码。默认情况下,像 Eclipse 之类的一些 IDE 使用 CP1252 保存内容,但您需要文件为 UTF-8。这也是您的 java 代码所必需的。

如果您尝试使用 \uxxxx 字符,但您的应用程序默认使用 CP1252,则转义码的转换会导致错误字符。

如果您使用 InputStreamReader 强制读取为 UTF-8,但您的代码和/或文件未使用 UTF-8 支持,则会导致字符错误。

如果你使用 UTF-8 转换字符串但你的源代码是 CP1252 你应该有同样的问题。

之前关于源代码的相关回答:Should source code be saved in UTF-8 format

  • 记事本++有一个菜单来查看文件的格式并在“格式”菜单中更改它,您应该查看文件,就像它应该被其他格式打开一样,或者您应该将文件转换为其他文件格式,如“ UTF-8"

【讨论】:

  • 当我用 Notepad++ 打开属性文件时,它显示 OK,但是当我用 Netbeans 打开它时,它显示全部失败(日语和俄语也失败)。为什么会出现这个问题???
  • Notepad++ 以正确的格式打开文件。但是像netbeans这样的ide只有项目指定的格式。
  • 完成,我尝试在 NetBeans/Eclipse 中创建新文件,它显示得很好。谢谢大家的帮助:) :) :)
  • 当我尝试使用 Notepad++ 再次编辑该属性文件时,我的测试再次失败。我应该在 Windows 和 Linux 中使用哪个编辑器来编辑属性文件
  • 只是想补充一下:注意 Notepad++ 的“UTF-8 with BOM”会添加 BOM 字符,这可能会破坏某些内容,所以请使用“UTF-8 without BOM”...这是一个滴答作响的时间-物料清单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 2020-07-10
  • 1970-01-01
  • 2012-10-26
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多