机械化转换 - 字符转换为 -

时间:2013-05-26 03:52:04

标签: utf-8 mechanize

我正在使用Mechanize在http://www.daz3d.com/pirates-black-pearl阅读网页。

页面看起来似乎没问题,但由于某些原因,某些字符的翻译方式不同。

例如,当我在firefox中查看页面的来源时,产品描述中有一个

,如下所示:

<p>Pirates – Black Pearl is a high quality conforming clothing from Pretty3D. Designed specifically for Victoria 4, Pirates – Black Pearl is a complete conforming outfit that includes a Dress, Corset, Panty, Boots, Necklace, Pistol Holder, and Seven Props.</p>

但是,当我查看Mechanize下载的内容时,我看到了:

<p>Pirates – Black Pearl is a high quality conforming clothing from Pretty3D. Designed specifically for Victoria 4, Pirates – Black Pearl is a complete conforming outfit that includes a Dress, Corset, Panty, Boots, Necklace, Pistol Holder, and Seven Props.</p>

注意 - 替换为 - 。

charset在标题中设置为utf-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

这种情况发生在许多应该是常见ASCII的字符中。

这里发生了什么,我该如何解决?

我知道这是一个unicode问题,但不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

那不是连字符;这是一个endash,它的宽度大致与字母N(名称的来源)相同。

Endash的Unicode代码点为u + 2013(十六进制),它转换为UTF-8中的三个八位字节(字节),因此如果您错误地将内容视为ASCII,则看起来恰到好处。

在u + 2014上还有一个Emdash(基于M的宽度)。

修复方法实际上是尊重您正在使用的页面的编码;如果它说它是UTF-8,请确保使用该编码解析页面。有许多Unicode代码点看起来类似于不相同的ASCII字符。其中一些存在是为了与传统编码兼容,有些存在是因为有足够强大的案例表明它们是截然不同的字符(包括一些传统的连字,后来被称为不同的字符)。

有一个转换,一些映射启用称为“最佳拟合转换”,其中选择与目标编码“足够接近”(通过某种定义)的字符而不是使用“默认”映射(通常是问号或未知字符标记),但我只建议处理某些遗留编码。 UTF-8在大多数环境中都很容易处理14 - 18年,因此做正确的事情不应该是一种负担。