Java中的日语字符串

时间:2009-09-29 03:38:52

标签: java unicode cjk

我是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天没有解决方案了。提前谢谢。

4 个答案:

答案 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运行,可能还有其他方法可以设置这些属性)