iconv 未完全转换为 utf8

iconv not complete convert to utf8

我在本站转换我的文字时,转换正确:
http://string-functions.com/encodedecode.aspx
我选择来源 'Windows-1252' 和目标 'utf-8'.
在下面的屏幕截图中看到它:
https://i.stack.imgur.com/2Pn4E.png

但是当我用下面的代码转换时,有些字母没有转换,文本被打乱。

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

应转换的短语:

آموزش Ùˆ نرم Ø§ÙØ²Ø§Ø±Ù‡Ø§ÛŒ تعمیر مانیتور

如果真正转换应该是这个短语:

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

请帮助我。谢谢

我的原文:

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

原文为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-friendly,进行反向转换,然后再用 å 替换回来。

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===!)