Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.properties getProperty方法为UTF-8字符串返回null_Java_Utf 8 - Fatal编程技术网

java.util.properties getProperty方法为UTF-8字符串返回null

java.util.properties getProperty方法为UTF-8字符串返回null,java,utf-8,Java,Utf 8,从属性文件获取本地化值(UTF-8字符串)时遇到问题 这就是我所做的 //properties file containing //name=हिन्दी public static void main(String[] args) { File f = new File("path\\to\\properties\\file"); Properties p = new Properties(); try { p.load(new InputStreamReader(

从属性文件获取本地化值(UTF-8字符串)时遇到问题
这就是我所做的

//properties file containing
//name=हिन्दी
public static void main(String[] args)
{
  File f = new File("path\\to\\properties\\file");
  Properties p = new Properties();
  try
   {
     p.load(new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8")));
   }
  catch(IOException iox) {}
  System.out.println(p.getProperty("name")); //outputs null
  System.out.println(p.toString()); //outputs  { name= हिन्दी }
}
谢谢

您的问题在这里:

catch(IOException iox){}


这被称为“相互失败”。永远不要这样做。从文件加载属性的代码失败并引发异常,您甚至不知道这一点。添加
e.printStackTrace()
并将打印属性值的代码移动到
try/catch
块中。查看异常并修复错误。我相信您的文件路径是错误的,因此您将获得
FileNotFoundException
,或者您可能没有访问此文件的权限

如果最后一行实际输出
name=हिन्दी
那么属性文件中的键字符串似乎有问题;也许in包含一些看不见的空白字符,或者“name”的其中一个字符不是普通的拉丁字母,而是看起来像它的东西。查看HEX编辑器中的属性文件。

您将<代码>字符集传递给<代码> InputStreamReader <代码>,而不是<代码> FielnPixStuts,对吗?考虑在属性中迭代名称值对,并在HEX中一次打印其内容,字符。看看有没有什么奇怪的事情发生了。哦,是的!这里只是一个输入错误。。在我的实际代码中,我将
Charset
传递给InputStream异常是什么样子的?你能在这里打印stacktrace吗?没有例外,它只打印null,但在这种情况下,最后一行不会输出任何内容。是的!该名称将附加“/ufeff”。但这是怎么发生的,为什么发生的?如何修复它!我会手动编辑该文件。我不知道它是不是由某个软件生成的。。。在这种情况下,该软件有问题。已尝试手动编辑该文件。在np++中,它(额外的字符)只能在十六进制视图中看到。我能够解决这个问题的唯一方法是更改属性文件本身的编码。但是它将无法保存UTF-8字符串。@Naveed:这是一个UTF-16(!)字节顺序标记。无论你用什么方法来创建这个文件,都犯了很大的错误。一个好的文本编辑器应该有一个选项,可以将文本保存为UTF-8,而不带任何字节顺序标记。Np++在“Encoding”菜单中确实有这个选项,但它可能无法消除一个完全错误的选项BOM@Naveed:哦,如果您首选的编辑器坚持使用BOM表,解决方法可能是以空行开始文件。