Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 从包含utf 8字符的属性文件读取_Java_Parsing_Encoding_Utf 8 - Fatal编程技术网

Java 从包含utf 8字符的属性文件读取

Java 从包含utf 8字符的属性文件读取,java,parsing,encoding,utf-8,Java,Parsing,Encoding,Utf 8,我正在读取由UTF-8字符集中的消息组成的属性文件 问题 输出的格式不正确。我正在使用输入流 属性文件如下所示 username=LBSUSER password=Lbs@123 url=http://localhost:1010/soapfe/services/MessagingWS timeout=20000 message=Spanish character are = {á é í, ó,ú ,ü, ñ, ç, å, Á, É, Í, Ó, Ú, Ü, Ñ, Ç, ¿, °, 4° añ

我正在读取由UTF-8字符集中的消息组成的属性文件

问题

输出的格式不正确。我正在使用
输入流

属性文件如下所示

username=LBSUSER
password=Lbs@123
url=http://localhost:1010/soapfe/services/MessagingWS
timeout=20000
message=Spanish character are = {á é í, ó,ú ,ü, ñ, ç, å, Á, É, Í, Ó, Ú, Ü, Ñ, Ç, ¿, °, 4° año = cuarto año, €, ¢, £, ¥}
我像这样读文件

Properties props = new Properties();
props.load(new FileInputStream("uinsoaptest.properties"));
String username = props.getProperty("username", "test");
String password = props.getProperty("password", "12345");
String url = props.getProperty("url", "12345");
int timeout = Integer.parseInt(props.getProperty("timeout", "8000"));
String messagetext = props.getProperty("message");
System.out.println("This is soap msg : " + messagetext);
上述消息的输出为

您可以在该行之后的控制台中看到该消息

{**********************************SOAP消息测试*********************************}


如果我能得到任何帮助正确阅读此文件,我将不胜感激。我可以用另一种方法读取此文件,但我希望代码修改更少。

使用带有
属性的
InputStreamReader
。加载(读卡器)


使用
props.load(新文件读取器(“uinsoaptest.properties”)
。默认情况下,它使用encoding
Charset.forName(System.getProperty(“file.encoding”))
,可以通过
System.setProperty(“file.encoding”、“UTF-8”)
或命令行参数
-Dfile.encoding=UTF-8
将其设置为UTF-8。在构造FileInputStream对象时,应该指定UTF-8编码。您可以使用此构造函数:

new FileInputStream("uinsoaptest.properties", "UTF-8");
如果您想更改JVM,以便在默认情况下能够读取UTF-8文件,则必须将JVM选项中的JAVA_工具_选项更改为以下内容:

-Dfile.encoding=UTF-8

如果有人使用@Value注释,可以尝试使用StringUils

@Value("${title}")
private String pageTitle;

public String getPageTitle() {
    return StringUtils.toEncodedString(pageTitle.getBytes(Charset.forName("ISO-8859-1")), Charset.forName("UTF-8"));
}

这个构造函数不存在。@javafantic是的,检查一下这个构造函数,可能是你正要写其他东西。@Binkan Salaryman什么是
FileInputStream.(String,String)
???我不understand@MukhamedaliZhadigerov
是构造函数的反射内部方法名称,因此这是指
类FileInputStream
的构造函数,其参数类型为
String
String
请参见:这是一个奇怪的问题。在ubuntu中,我只使用了
props.load(propFile)
,效果很好,但在windows中,我必须使用上面的代码才能正确加载unicode prop文件!毕竟,这并不奇怪。角色集严重依赖于平台。因此,Ubuntu的行为与Windows的不同并不令人惊讶。事实上,在移动到下一个Windows版本(确切地说,是另一个JVM版本)后,您可能需要再次更改代码抛出
FileNotFoundException
。其中propFileName是
config/cop-app-dev.properties
@mukhamedalizadigerov,这是另一个问题。确保包含属性的文件存在(并且可读)相对于您的java可执行文件。如果不确定,请尝试绝对路径。请注意,java 7引入了方便的StandardCharsets.UTF_8,而不是易于出错的Charset.forName(“UTF-8”),这在windows中的java 8上不起作用。如果查看java源代码,它会硬编码以加载0(新的LineReader(新的InputStreamReader(bis,ISO8859-1));
@Value("${title}")
private String pageTitle;

public String getPageTitle() {
    return StringUtils.toEncodedString(pageTitle.getBytes(Charset.forName("ISO-8859-1")), Charset.forName("UTF-8"));
}