2017-02-18 62 views
0

當我轉換本網站上的我的文字,正確地轉換:
http://string-functions.com/encodedecode.aspx
我選擇源「的Windows-1252」和目標「UTF-8」。
看到它下面的截圖:
https://i.stack.imgur.com/2Pn4E.png的iconv不完全轉換爲utf8

但是,當我用下面的代碼轉換,有些字母不轉換,文字打亂。

iconv -c -f UTF-8 -t WINDOWS-1252 <mytext.txt> fixed_mytext.txt 

應該要轉換的短語:

آموزش Ùˆ نرم اÙزارهای تعمیر مانیتور 

如果爲true轉換應該是這句話:

آموزش و نرم افزارهای تعمیر مانیتور 

普萊舍幫助我。謝謝

我的原單的文字:

http://www.todaymagazine.ir/forum.txt 
+0

這是沒用的,張貼的文字是不是UTF-8在這裏。它會被打亂,沒有人能夠重現你的錯誤。發佈數據的十六進制轉儲('od -t x1 myfile.txt')。 –

+0

我的tex的十六進制: http://www.todaymagazine.ir/mytext-hex.txt – nekooee

+1

(1)如果您正在發佈一個文件的鏈接,請發送一個鏈接指向原始文件,而不是發佈到十六進制轉儲! (2)文件很大,大部分似乎是ASCII,請只發布相關片段。 (3)我已經嘗試過你剛纔所做的並且對我有效(我從問題中複製並粘貼了你的短語,而不是從鏈接的文件中)。你將UTF-8文本重新解釋爲Windows1252並再次轉換爲UTF-8 。您必須從UTF-8轉換爲Windows-1252 *,然後將結果用作UTF-8 *。 –

回答

1

原文是UTF-8。它被錯誤地解釋爲Windows-1252中的文本,並從Windows-1252轉換爲UTF-8。這應該從未做過。爲了消除損壞,我們需要將文件從UTF-8轉換爲Windows-1252,然後將其視爲UTF-8文件。

但是有一個問題。該字母以UTF-8編碼爲0xd9 0x81,代碼0x81不是Windows1252的一部分。

幸運的是,當第一次錯誤轉換時,字符不會丟失或被替換爲問號。它被轉換爲控制字符0xc2 0x81

0xd9代碼是在Windows1252中,它是字母Ù,UTF-8中的代碼是0xc3 0x99。所以轉換文件中的最後一個字節序列是0xc3 0x99 0xc2 0x81

我們可以用一個sed腳本替換爲ASCII友好的東西,進行反轉換,然後用ف替換它。

LANG=C sed $'s/\xc3\x99\xc2\x81/===FE===/g' forum.txt | \ 
     iconv -f utf8 -t cp1252 | \ 
     sed $'s/===FE===/\xd9\x81/g' 

結果是以UTF-8編碼的原始文件。

(確保===FE===沒有在文本中使用的第一!)

+0

非常感謝你爲我工作:):* – nekooee

+0

只應使用「utf-8」而不是「utf8」。 :) – nekooee