32

あるエンコーディングの文字列を別のエンコーディングに変換するために使用できる無料の Java ライブラリはありますiconvか? Java バージョン 1.3 を使用しています。

4

4 に答える 4

45

標準以外のライブラリは必要ありません。ただCharsetを使用してください。(String コンストラクターと getBytes メソッドを使用することもできますが、個人的には、文字エンコーディングの名前だけを操作するのは好きではありません。タイプミスの余地が多すぎます。)

編集: コメントで指摘されているように、引き続き Charset インスタンスを使用できますが、String メソッドの使いやすさがあります: new String(bytes, charset)およびString.getBytes(charset)

URL エンコーディング (または、 「URL%20のコードは何ですか?」)」を参照してください。

于 2008-10-23T08:57:41.043 に答える
22

CharsetDecoderあなたが探しているものでなければなりませんか?

ISO-8859-1多くのネットワーク プロトコルとファイルは、 ( )などのバイト指向の文字セットで文字を格納しますISO-Latin-1
ただし、Java のネイティブ文字エンコーディングはユニコードUTF16BE (16 ビット UCS 変換形式、ビッグエンディアンのバイト順)。

を参照してくださいCharset。これは、デフォルトの文字セットを意味するものではありませんUTF16(つまり、デフォルトの「16 ビットUnicode コード単位のシーケンスとバイトのシーケンスの間のマッピング」):

Java 仮想マシンのすべてのインスタンスには、デフォルトの文字セットがあります。これは、標準の文字セットの 1 つである場合とそうでない場合があります。
[ US-ASCII,ISO-8859-1別名ISO-LATIN-1, UTF-8, UTF-16BE, ]デフォルトの文字セットはUTF-16LE、 仮想マシンの起動時に決定され、通常、基盤となるオペレーティング システムで使用されているロケールと文字セットに依存します。UTF-16

ISO-8859-1この例では、 のエンコードされたバイトByteBufferを の文字列に、CharBufferまたはその逆に変換する方法を示します。

// Create the encoder and decoder for ISO-8859-1
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

try {
    // Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
    // The new ByteBuffer is ready to be read.
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));

    // Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    // The new ByteBuffer is ready to be read.
    CharBuffer cbuf = decoder.decode(bbuf);
    String s = cbuf.toString();
} catch (CharacterCodingException e) {
}
于 2008-10-23T08:57:21.123 に答える
2

String が最初に間違ったエンコーディングを使用してエンコードされている場合、エラーなしで別のエンコーディングに変更できない可能性があることを付け加えたいと思います。この質問は、ここでの変換が間違ったエンコーディングから正しいエンコーディングに行われたとは述べていませんが、この状況のた​​めに個人的にこの質問に出くわしたので、他の人にも注意してください.

他の質問のこの回答は、変換が常に正しい結果をもたらさない理由を説明します https://stackoverflow.com/a/2623793/4702806

于 2015-09-02T10:31:47.603 に答える