2017-02-18 63 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