1

以下のコード スニペットを書き、出力がAçılış Tarih/Saati:になることを期待していますが、代わりにAçılış Tarih/Saati:コードは次のとおりです。

パブリック クラス ResourceBundleTest {

public static void main(String[] args) {            
        try{
        String turkey = "A\u00e7\u0131l\u0131\u015f Tarih/Saati:";
        System.out.println(new String(turkey.getBytes("UTF-8")));
        }
        catch(Exception e)
        {
            System.out.println("hello");
        }
    }

}

この問題を解決するにはどうすればよいか教えてください。

4

2 に答える 2

4

このコードは基本的に壊れています:

new String(turkey.getBytes("UTF-8"))

それか:

  • 文字列で始まります。
  • テキストを UTF-8 としてエンコードします。
  • プラットフォームのデフォルトのエンコーディングを使用してそのバイナリ データをデコードします。

これは、画像を PNG として保存し、それを JPEG として読み込もうとするようなものです。

あなたが試すことができます:

System.out.println(turkey);

...それが希望どおりに表示されない場合、問題はおそらくコンソールがそれらの文字をサポートしていないことです。エンコーディングを変更しようとしても何の役にも立ちません。(本当に運が良ければ) 元の文字列に戻すのが最善の方法です。プラットフォームのデフォルトのエンコーディングがUTF-8ではないため、データが失われている可能性が高いです(そして、これはあなたの出力に当てはまるようです)。

于 2013-06-27T18:53:44.120 に答える
1

turkey.getBytes("UTF-8")UTF-8 でエンコードされた文字列の内容を含むバイト配列を明示的に作成します。ただし、コンストラクターString(byte[])は、そのドキュメントに従って、システムのデフォルトのエンコーディングを使用してこのバイト シーケンスをデコードします。UTF-8ではない可能性があります。

でも、書いてみませんSystem.out.println(turkey)か?String を UTF-8 でエンコードし、印刷する前にデコードするポイントは何ですか?

于 2013-06-27T18:54:47.023 に答える