首页 文章

修复编码问题

提问于
浏览
1

我用cURL为一些小实验收集了一些评论 . 除了一些有编码问题的文件外,这个工作大部分都很好 .

特别是,没有问题:

没有任何特殊字符的

  • 文件
    具有异国情调字符集的
  • 文件(中文,日文,韩文等)

但是,这些确实存在问题:

  • 只有几个特殊字符的文件

例如,意大利文:

mi sono fatto dare un menù classico per vedere i loro piatti che solitamente offrono e penso proprio di tornarci

在这个特殊情况下,ù应该是ù . 'file'实用程序告诉我该文件确实是一个UTF-8文件:'HTML文档,UTF-8 Unicode文本,有很长的行' . 但是vim和其他编辑错误地显示了这个角色 .

我想了解问题的根本原因 . cURL是否错误地猜测了原始HTML的编码并将单个字符保存为两个UTF8字符?有没有办法强迫cURL做正确的事情?

是否有自动方法在一堆文件中检测此问题?我宁愿不重新加载所有文件 .

有没有自动解决此问题的方法?即,用ù(以及其他类似问题)替换ù并保存为UTF8?我最接近的是使用iconv:

iconv -f UTF-8 -t ISO-8859-1//TRANSLIT file

这解决了问题,但将文件保存为ISO-8859-1(这不是我想要的) . 我也不确定这是否能解决每个编码错误的问题 .

上述句子的hexdump:

0000000 696d 7320 6e6f 206f 6166 7474 206f 6164
0000010 6572 7520 206e 656d c36e c283 20b9 6c63
0000020 7361 6973 6f63 7020 7265 7620 6465 7265
0000030 2065 2069 6f6c 6f72 7020 6169 7474 2069
0000040 6863 2065 6f73 696c 6174 656d 746e 2065
0000050 666f 7266 6e6f 206f 2065 6570 736e 206f
0000060 7270 706f 6972 206f 6964 7420 726f 616e
0000070 6372 0a69                              
0000074

在上面的untv命令之后的同一句子的Hexdump:

0000000 696d 7320 6e6f 206f 6166 7474 206f 6164
0000010 6572 7520 206e 656d c36e 20b9 6c63 7361
0000020 6973 6f63 7020 7265 7620 6465 7265 2065
0000030 2069 6f6c 6f72 7020 6169 7474 2069 6863
0000040 2065 6f73 696c 6174 656d 746e 2065 666f
0000050 7266 6e6f 206f 2065 6570 736e 206f 7270
0000060 706f 6972 206f 6964 7420 726f 616e 6372
0000070 0a69                                   
0000072

2 回答

  • 2

    我怀疑你有一些相互复杂的小问题:

    • 您的终端仿真设置为"Windows-1252"或"ISO-8859-1" . 它应该设置为"UTF-8" .

    • 您已将输出复制并粘贴到另一个文件中以执行十六进制转储 . 这会将文本复制为在屏幕上呈现的文本 . 十六进制转储似乎包含可能来自剪贴板的其他控制字符 .

    • 您的十六进制转储处于大端模式,这使得难以通过眼睛看到单词或解码UTF-8 .

    当我获取“http://www.tripadvisor.it/ShowUserReviews-g187849-d2263221-r233247966-Sant_Eustorgio-Milan_Lombardy.html ", with my terminal set to " UTF-8 " and my locale set to " en_GB.UTF-8 " (You should set it to which ever region is correct for you but ensure it ends in " .UTF-8”)时,文件正确保存为UTF-8并显示在 vimcatless 中 .

  • 0

    我认为 set fileencoding=utf-8 对你来说是错误的选择,因为它设置了写入文件的编码 . 显示的编码设置为 set encoding=utf-8 ,因此您应该尝试使用它 .

相关问题