我用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
上述无效命令后的同一句子的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
答案 0 :(得分:2)
我怀疑你有一些相互复杂的小问题:
当我获取“http://www.tripadvisor.it/ShowUserReviews-g187849-d2263221-r233247966-Sant_Eustorgio-Milan_Lombardy.html”时,我的终端设置为“UTF-8”,我的语言环境设置为“en_GB.UTF-8”(你应该将它设置为哪个区域对你而言正确但是确保它以“.UTF-8”结尾,文件正确保存为UTF-8并显示在vim
,cat
和less
中。
答案 1 :(得分:0)
我认为set fileencoding=utf-8
对你来说是错误的选择,因为它设置了写入文件的编码。显示的编码设置为set encoding=utf-8
,因此您应该尝试这样做。