为什么Unicode示例代码的标准压缩方案不起作用?

时间:2012-06-09 03:35:30

标签: unicode compression

我想学习SCSU http://unicode.org/reports/tr6 但是当我尝试Java sample code时,输出总是大于输入。 这就是我得到的: 我试过这个例子:

Ö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将样本明文粘贴到文件中。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

看起来样本编码器需要UTF-16输入,并且你给它UTF-8。

此输入:c396 6c20 666c 6965 c39f 7420 0aÖl fließt,为UTF-8,带有尾随空格和换行符。

你得到的是0fc3 966c 2066 6c69 65c3 9f74 20。第一个0fSCU标记,表示其余字节是big-endian UTF-16。问题是,而不是输入字符串的UTF-16等价物,其余的字节只是来自输入的完全相同的字节(减去换行符),而那些相同的字节代表完全不同UTF-8和UTF-16之间的字符。

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

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