Java无法正确编码中的汉字

时间:2014-08-22 10:36:29

标签: java ios macos utf-8 appium

我在10.8中使用Mac OS X. 我的Appium Java测试代码需要从iOS应用程序的可访问性标签中读取中文标签,并且可访问性标签是中文字符串,但是当java读取中文字符串到内存时编码不正确。 我的java源代码保存为“UTF-8”; 我的终端设置为“UTF-8”;

和酸代码类似如下:

String correct_aid = "你好";
String got_aid = driver.findElement(By.name('sayHello')).getText();
if (got_aid.contains(correct_aid)) {
    System.out.println("Got accessibility label string is matched.");
}
else {
    System.out.println("Got accessibility label string is not matched.");
    System.out.println("Expected accessibility label is: [" + correct_aid + "]");
    System.out.println("Captured accessibility label is: [" + got_aid + "]")
}

我得到的结果如下:

Got accessibility label string is not matched.
Expected accessibility label is: [你好]
Captured accessibility label is: [????]

看来,Java可以打印出java源代码中创建的变量,值为中文字符串, 但无法从读出来源转换正确的编码。

我还在终端中运行“locale”并获得以下结果:

LANG=
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

如您所知,如果输出源是txt文件,可能会在保存时将编码更改为“UTF-8”以进行修复,但现在我的输出源是iOS应用程序,因此我无法解决问题通过改变输出源编码。

你能提供其他方法我可以解决这个问题吗? 非常感谢。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题,只是在下面添加了〜/ .bash_profile

的声明
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8

然后运行以下命令启用它。

source ~/.bash_profile

希望可以帮助更多遇到这个问题的人。