我是Java的新手,所以如果这是一个非常容易的问题,请耐心等待。我有一个JUnit测试,我有一个硬编码的日语单词直接分配给一个字符串变量。现在,在分配了该字符串后,它变为“??”意味着编码在某处不正确。
public class TestTest extends TestCase {
public void testLocal(){
Locale.setDefault(Locale.JAPAN);//same problem with or without this line
String test = "会社";
//after this line, by watching at the debugger, the variable "test" contains "??"
assertEquals("会社", test);
}
}
因为这是一个测试用例,我相信它完全将问题与其他UI环境隔离开来。请帮帮我。已经2天没有解决方案了。提前谢谢。
答案 0 :(得分:4)
如果你有两次完全相同的字符串,那么使用什么编码并不重要...但我建议使用\uxxxx
转义格式来清楚实际上是哪个Unicode字符正在使用。这样它基本上与编码无关。
如果确实想在代码中使用带日语的字符串文字,请检查所有构建工具(等)是否同意您正在使用的文件编码。这在IDE,Ant等之间会有所不同(例如,它是-encoding
的{{1}}标志。)
答案 1 :(得分:2)
试试这个
...
assertEquals("会社", new String(test.getBytes(),"utf8"));
...
答案 2 :(得分:1)
我之前评论的一点点更新:我能够使用问号重现您的结果。除了我更改了我的shell默认LANG
设置之外,我完全按照您的方式完成了。
您(可能)获得问号的原因是您的环境区域设置与您的预期区域设置不匹配。首先尝试在shell中执行此操作(Bash):
export LANG="ja_JP.UTF-8"
或在Windows上:
set LANG=ja_JP.UTF-8
如果这不起作用,您可以从命令提示符处尝试:chsh 65001然后运行您的java程序。很抱歉抛弃所有这些建议..希望它有效!
答案 3 :(得分:1)
如果您的调试输出依赖于System.out,则输出可能会转换为您平台的默认编码。
当想要支持国际字符集时,我总是使用-Dfile.encoding = UTF8运行(几乎总是!)
即。运行方式: java -Dfile.encoding = UTF8 MyApp
(注意:如果您没有从CLI运行,可能还有其他方法可以设置这些属性)