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 环境完全隔离开来。请帮助我。2天没有解决。先感谢您。

4

4 回答 4

5

如果你有两次完全相同的字符串,那么使用什么编码并不重要......但我建议使用\uxxxx转义格式来明确实际使用了哪些 Unicode 字符。这样它基本上是独立于编码的。

如果您真的想在代码中使用带有日语的字符串文字,请检查您的所有构建工具(等)是否同意您正在使用的文件编码。这在 IDE、Ant 等之间会有所不同。(例如,它是 的-encoding标志javac。)

于 2009-09-29T03:44:59.040 回答
3

尝试这个

    ...
    assertEquals("会社", new String(test.getBytes(),"utf8"));
    ...
于 2012-04-09T13:56:04.883 回答
2

对我之前的评论的一点更新: 我能够用问号重现你的结果。我所做的和你所做的完全一样,只是我更改了我的 shell 默认LANG设置。

您(可能)得到问号的原因是您的环境语言环境与您的预期语言环境不匹配。首先在你的 shell(Bash) 中尝试这样做:

export LANG="ja_JP.UTF-8"

或在 Windows 上:

set LANG=ja_JP.UTF-8

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

于 2009-09-29T04:42:42.233 回答
1

如果您的调试输出取决于 System.out,则输出可能正在转换为您平台的默认编码。

当想要支持国际字符集时,我总是使用 -Dfile.encoding=UTF8 运行(几乎总是这样!)

即运行为:java -Dfile.encoding=UTF8 MyApp

(注意:如果您不是从 CLI 运行,则可能有其他方法可以设置这些属性)

于 2009-09-29T16:05:50.570 回答