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. 第一个0fSCU标签,它表示其余字节为大端 UTF-16。问题是,与输入字符串的 UTF-16 等效项不同,其余字节与输入中的字节完全相同(减去换行符),并且这些相同的字节代表 UTF-8 和 UTF 之间完全不同的字符-16。

你得到的输出似乎代表쎖氠晬楥쎟琠. 请注意,CompressMain据报道,这是一个 6 个字符长的字符串。您可以通过/expand同一类运行压缩输出以进行确认。

如果您将输入文件编码为 UTF-16,而不是 UTF-8,您应该得到您期望的输出。

于 2012-06-09T05:42:31.763 回答