我对此很陌生,对大多数人来说,这可能很容易,但我已经为此挣扎了好几天。
我正在使用perl编写一个web爬虫,web爬虫将使用LWP和一些简单的正则表达式提取某些信息。
这些信息保存在mySQL数据库中,该数据库将在安卓设备上使用。然而,当我测试网页爬虫时,我意识到有些信息是用HTML数字编码(&# 20856;&# 33775 ;)用中文(典華),而有些信息是使用iso-8859-1编码(Zhífú)。我使用PERL::Entities库解决了中文部分,当我将控制台设置为utf8时可以显示该库。然而,其他字母(Zhífú)只能显示在iso-8859-1中。如果我试图在utf8中显示它,它将变成Zh�f�。我的问题是:
如何确定它使用哪种编码,以及如何显示differently?
)。
非常感谢。
发布于 2011-09-09 09:42:21
(Zhífú)只能在iso-8859-1中显示.如果我试图在utf8中显示它,它将变成Zh�f�.
。
那完全是假的。您可以在iso-8859-1和UTF-8终端/应用程序/任何东西中显示"Zhífú“。事实上,你看到"Zhífú“的事实证明它可以显示在UTF-8中,因为这是一个UTF-8网页。如果要获得"Zh�f�",这是因为在将字符串交给终端/应用程序/任何需要UTF-8的东西之前,没有使用UTF-8对字符串进行编码。
不管怎样,关于这个问题。我假设您是在存储文本,而不是HTML。
破译每一个输入!对所有输出进行编码!那就没问题。
From the web
5a 68 c3 ad 66 c3 ba
|
decode Done for you by ->decoded_content (LWP::UA)
| or by ->content (WWW::Mech)
v
Decoded text Manipulate as desired
Zhífú
|
encode Done for you by DBI
|
v
Database
5a 68 c3 83 c2 ad 66 c3 83 c2 ba事实上,解码应该已经由->decoded_content为您完成,编码应该已经由DBI完成,所以我不明白您为什么会有此问题。
当您从数据库中读取并输出到屏幕/任何东西时,也是一样的。
5a 68 c3 83 c2 ad 66 c3 83 c2 ba
Database
|
decode Done for you by DBI if you use
| the ..._utf8 flag for your driver
v
Decoded text Manipulate as desired
Zhífú
|
encode use open ':std', ':locale';
|
v
Screen
5a 68 c3 83 c2 ad 66 c3 83 c2 bahttps://stackoverflow.com/questions/7358714
复制相似问题