我需要使用UTF-8在我的资源属性使用Java的ResourceBundle。当我直接在属性文件中输入文本时,它显示为mojibake。

我的应用程序运行在谷歌应用程序引擎。

谁能给我举个例子?我找不到这份工作。


当前回答

ResourceBundle。例如,如果属性文件使用cp1251字符集,则使用UTF-8和new String方法的控件将不起作用。

所以我建议使用一种常用的方法:使用unicode符号。:

IDEA -有一个特殊的“透明本机到ascii转换”选项(设置>文件编码)。

Eclipse——有一个插件“属性编辑器”。它可以作为单独的应用程序工作。

其他回答

我们创建了一个资源。utf8文件,包含UTF-8格式的资源,并有一个规则运行如下:

native2ascii -encoding utf8 resources.utf8 resources.properties

下面是一个Java 7解决方案,它使用了Guava出色的支持库和try-with-resources结构。它使用UTF-8读取和写入属性文件,以获得最简单的整体体验。

读取一个UTF-8属性文件:

File file =  new File("/path/to/example.properties");

// Create an empty set of properties
Properties properties = new Properties();

if (file.exists()) {

  // Use a UTF-8 reader from Guava
  try (Reader reader = Files.newReader(file, Charsets.UTF_8)) {
    properties.load(reader);
  } catch (IOException e) {
    // Do something
  }
}

用UTF-8格式写一个属性文件:

File file =  new File("/path/to/example.properties");

// Use a UTF-8 writer from Guava
try (Writer writer = Files.newWriter(file, Charsets.UTF_8)) {
  properties.store(writer, "Your title here");
  writer.flush();
} catch (IOException e) {
  // Do something
}

不管怎样,我的问题是文件本身的编码是错误的。使用iconv对我很有效

iconv -f ISO-8859-15 -t UTF-8  messages_nl.properties > messages_nl.properties.new

从Java 9开始,加载属性文件的默认值已更改为UTF-8。https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm

注意:在Java <= 8 Java属性文件应该编码在ISO 8859-1!

ISO 8859-1字符编码。 不能直接输入的字符 用这种编码表示可以 使用Unicode转义符编写;只有 允许输入一个“u”字符 转义序列。

Java文档

如果你真的想这样做:看看: Eclipse中的Java属性UTF-8编码——有一些代码示例


因为Java 9:属性文件是用UTF-8编码的,所以应该没有问题/疑问

在Java SE 9中,属性文件以UTF-8编码方式加载。在以前的版本中,ISO-8859-1编码用于加载属性资源包。

(https://docs.oracle.com/javase/9/intl/internationalization -改进- jdk 9. - htm # jsint guid - 9 - dcdb41c a989 - 4220 - 8140 - dbfb844a0fca)