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

同じ正確な文字列を2回取得した場合、どのエンコーディングが使用されているかは問題ではありません...ただし、\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

以前のコメントのちょっとした更新: 疑問符を付けて、結果を再現することができました。シェルのデフォルト設定を変更したことを除いて、私はあなたがしたのとまったく同じようにしましたLANG

疑問符が表示される(可能性がある)理由は、環境ロケールが目的のロケールと一致しないためです。最初にシェル(Bash)でこれを実行してみてください:

export LANG="ja_JP.UTF-8"

またはWindowsの場合:

set LANG=ja_JP.UTF-8

それでも問題が解決しない場合は、コマンドプロンプトから試してみてください。chsh65001次に、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 に答える