首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能完全转换为utf8

不能完全转换为utf8
EN

Stack Overflow用户
提问于 2017-02-18 19:22:27
回答 1查看 595关注 0票数 0

当我在这个网站上转换我的文本时,要正确地转换:

http://string-functions.com/encodedecode.aspx

我选择源‘Windows1252’和目标'utf-8‘。

在下面的截图中可以看到:

https://i.stack.imgur.com/2Pn4E.png

但是,当我用下面的代码进行转换时,有些字母不会被转换,文本也会中断。

代码语言:javascript
运行
复制
iconv -c -f UTF-8 -t WINDOWS-1252 < mytext.txt > fixed_mytext.txt

应转换的短语:

代码语言:javascript
运行
复制
آموزش Ùˆ نرم Ø§ÙØ²Ø§Ø±Ù‡Ø§ÛŒ تعمیر مانیتور

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

代码语言:javascript
运行
复制
 آموزش و نرم افزارهای تعمیر مانیتور 

请帮帮我。谢谢

我的原文是:

代码语言:javascript
运行
复制
http://www.todaymagazine.ir/forum.txt
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-19 00:37:33

原文载于UTF-8。它被错误地解释为Windows1252中的文本,并从Windows1252转换为UTF-8。这不应该做的。为了消除损坏,我们需要将文件从UTF-8转换为Windows-1252,然后将其视为UTF-8文件。

不过有个问题。字母0xd9 0x81在UTF-8中编码,而代码0x81不是Windows1252的一部分。

幸运的是,当第一次错误转换时,字符没有丢失,也没有被问号替换。它被转换成一个控制字符0xc2 0x81

0xd9代码在Windows1252中,它是字母Ù,在UTF-8中是0xc3 0x99.因此,转换文件中的0xc3 0x99 0xc2 0x81是ف的最后一个字节序列。

我们可以用一个sed脚本替换ASCII友好的东西,进行反向转换,然后用ف替换它。

代码语言:javascript
运行
复制
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===!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42319656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档