Java中的日语字符串

3

我是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环境隔离开来。请在这方面帮助我。已经两天了还没有解决方案。提前感谢您的帮助。

也许你的调试器不兼容? 此外,你不能仅通过代码示例来假设分配的字符串是Unicode。因此,就像John Skeet建议的那样,\u****表示可能更好。 - user224579
4个回答

5
如果你有完全相同的字符串,使用什么编码其实并不重要……但我建议使用\uxxxx转义格式来明确表示实际使用的Unicode字符。这样基本上就与编码无关了。
如果你真的想在你的代码中使用带有日语的字符串字面量,请检查所有的构建工具(等等)是否都同意使用文件编码。这将因IDE、Ant等而异。(例如,对于javac,是-encoding标志。)

3

试试这个

    ...
    assertEquals("会社", new String(test.getBytes(),"utf8"));
    ...

2

关于我之前评论的一点更新:我已经能够重现您的结果,出现了问号。除了更改我的shell默认LANG设置外,我完全按照您的方式操作。

您可能(会)出现问号的原因是您的环境语言环境与您想要的语言环境不匹配。首先在您的shell(Bash)中尝试执行以下操作:

export LANG="ja_JP.UTF-8"

或在Windows上:

set LANG=ja_JP.UTF-8

如果这不起作用,您可以尝试从命令提示符中运行以下命令:chsh 65001,然后运行您的Java程序。很抱歉给出这些建议...希望它能起作用!

谢谢您的回答。我尝试设置LANG(我在Windows上,所以希望是一样的),但是我仍然有同样的问题。 - Eugene Ramirez

1
如果您的调试输出依赖于System.out,则可能会将输出转换为平台的默认编码。
我总是在想要支持国际字符集时使用-Dfile.encoding=UTF8运行(几乎总是如此!)
例如,运行: java -Dfile.encoding=UTF8 MyApp (注意:如果您不是从CLI运行,则可能有其他设置这些属性的方法)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接