0

インド文字のbyte []配列を取得し、それを電子メールで転送される読み取り可能な文字列に変換するSMPPゲートウェイを構築しています。Win マシンでは、次のコードが機能しています。

byte[] data= ....;
shortMessage = new String(data, GSMCharset.forName("UTF-16"));

ただし、Linuxでは、それはゴミです。

他の文字セットオプションを試しましたが、すべて何も得られません。Linuxで動作させる方法についてのアイデア。

(データコーディング == 8)

4

1 に答える 1

1

出力のエンコーディングは、ソース ファイルのエンコーディングによって制御されているようです。コンパイル時に指定しない限り ( Java ソース ファイルのエンコーディングを指定するにはどうすればよいですか? )、デフォルトのエンコーディングは OS から継承されます。

あなたが使用した Windows マシンには、予期した出力を引き起こすデフォルトのエンコーディングがありましたが、Linux マシンにはありませんでした。報告された同様の問題については、この質問を参照してください - Charset of Java source file and failing test

挙動を再現できました。ソースファイルのエンコーディングを変更するという修正も見つかりました。詳細については、以下をお読みください。

次のコードを 2 つの異なるエンコーディングで実行しました。

System.out.println(Charset.defaultCharset().toString());
byte[] data = new byte[] {9, 22, 9, 65, 9, 54, 9, 22, 9, 44, 9, 48, 9, 64};
System.out.println(Arrays.toString(data));
System.out.println(new String(data, "UTF-16"));

OSのデフォルトエンコーディングを使用

私の場合、Mac の「MacRoman」でした。出力は次のとおりです。

MacRoman
[9, 22, 9, 65, 9, 54, 9, 22, 9, 44, 9, 48, 9, 64]
???????

UTF-8 エンコーディングの使用

ソース ファイルのエンコーディングを変更しました (ソース ファイルの「プロパティ」を参照してください)。再び走った。出力は次のとおりです。

UTF-8
[9, 22, 9, 65, 9, 54, 9, 22, 9, 44, 9, 48, 9, 64]
खुशखबरी
于 2013-06-24T15:33:17.777 に答える