2012-06-09 30 views
0

我想學習SCSU http://unicode.org/reports/tr6 但是當我嘗試Java sample code時,輸出總是大於輸入。 這是我的了: 我試過了這個例子:爲什麼Unicode示例代碼的標準壓縮方案不起作用?

Ö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 

但我得到的是: 輸入:

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

輸出:

[email protected]:/home/famihug/TestRoom/SCSU%java CompressMain /compress german.txt 
Compressed german.txt: 6 chars to german.csu 13 bytes. Ratio: 108%. 

[email protected]:/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 

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

~~~~~~~~~~~~~ 這就是,當我試圖日本樣品:

[email protected]:/home/famihug/TestRoom/SCSU%wc -m jav.txt      [0] 
117 jav.txt 
[email protected]:/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來粘貼示例明文到文件。我在這裏做錯了什麼?

回答

2

它看起來像樣品編碼期待UTF-16輸入,而你給它UTF-8。

此輸入:c396 6c20 666c 6965 c39f 7420 0a是UTF-8中的Öl fließt,帶有尾部空格和換行符。

你找回什麼是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,你應該讓你期望的輸出。

+0

쎖氠晬楥쎟琠是亂碼輸出確實:2(非常罕見)韓國音節,4個正弦圖是在意義風馬牛不相及。 – dda

+0

@John平坦度:謝謝,它工作。但是我想問你一些額外的問題,因爲很難找到一個像你一樣使用Unicode的人。 我將utf-8文件保存到utf-16,然後使用SCSU壓縮它,在展開壓縮文件後,我找回了我的UTF-8版本,無需添加操作。爲什麼? – HVNSweeting

+0

你確定你有UTF-8嗎?它*可能*但不太可能代碼使用不同的默認編碼輸入和輸出文件。 –