0

SCSU http://unicode.org/reports/tr6を学習しようとしていますが、 Java サンプル コード を試すと、常に出力が入力よりも大きくなります。これは私が得たものです:私はこの例を試しました:

Öl fließt 

彼らは入力を言います:

Unicode code points (9 code points):
00D6 006C 0020 0066 006C 0069 0065 00DF 0074 

出力は次のとおりです。

Compressed (9 bytes):
D6 6C 20 66 6C 69 65 DF 74 

しかし、私が得たのは: 入力:

famihug@hvn:/home/famihug/TestRoom/SCSU%xxd german.txt                      [0]
0000000: c396 6c20 666c 6965 c39f 7420 0a         ..l flie..t .

出力:

famihug@hvn:/home/famihug/TestRoom/SCSU%java CompressMain /compress german.txt
Compressed german.txt: 6 chars to german.csu 13 bytes. Ratio: 108%.

famihug@hvn:/home/famihug/TestRoom/SCSU%ls -lt german.*                     [0]
-rw-r--r-- 1 famihug famihug 13 2012-06-09 10:24 german.csu
-rw-r--r-- 1 famihug famihug 13 2012-06-08 01:04 german.txt

famihug@hvn:/home/famihug/TestRoom/SCSU%xxd german.csu                      [0]
0000000: 0fc3 966c 2066 6c69 65c3 9f74 20    

~~~~~~~~~~~~~ そして、これは私が日本語のサンプルを試したときです:

famihug@hvn:/home/famihug/TestRoom/SCSU%wc -m jav.txt                       [0]
117 jav.txt
famihug@hvn:/home/famihug/TestRoom/SCSU%ls -lt jav.*                        [0]
-rw-r--r-- 1 famihug famihug 349 2012-06-08 01:13 jav.txt
-rw-r--r-- 1 famihug famihug 405 2012-06-08 01:01 jav.csu

彼らは、出力が圧縮されていると言った(178バイト)

gedit/Vim を使用して、サンプルの平文をファイルに貼り付けます。ここで何が間違っていましたか?

4

1 に答える 1

2

サンプル エンコーダーは UTF-16 入力を想定しているようですが、UTF-8 を指定しています。

この入力:c396 6c20 666c 6965 c39f 7420 0aÖl fließtUTF-8 で、末尾にスペースと改行があります。

返されるのは0fc3 966c 2066 6c69 65c3 9f74 20. 1 つ目0fSCUタグで、残りのバイトがビッグエンディアンの UTF-16 であることを示します。問題は、入力文字列のUTF-16に相当する代わりに、残りのバイトは入力からのまったく同じバイト(改行を差し引いたもの)であり、それらの同じバイトはUTF-8とUTFの間でまったく異なる文字を表します-16.

あなたが得ている出力は、 を表しているようです쎖氠晬楥쎟琠。報告されているように、これは 6 文字の長さの文字列であることに注意してくださいCompressMain。圧縮された出力を/expand同じクラスに戻して確認することができます。

入力ファイルを UTF-8 ではなく UTF-16 でエンコードすると、期待どおりの出力が得られるはずです。

于 2012-06-09T05:42:31.763 に答える