如何从由错误的字符集编码的字符串中正确地重构String

时间:2012-11-12 09:22:02

标签: matlab encoding urlread

修改添加了一些新信息,以便更清楚地解决问题。

在2012B之前的早期matlab中,如果Web内容的字符集不是utf8,方法urlread将返回由错误的字符集构造的字符串。 (它在Matlab 2012B中有所改进)

例如

% a chinese website whose content encoding by gb2312
url = 'http://www.cnbeta.com/articles/213618.htm'; 
html = urlread(url)

因为Matlab使用utf8而不是gb2312编码html。 你会看到html中的中文字符没有正确显示。

如果我使用utf8编码阅读中文网站,那么一切正常:

% a chinese website whose content encoding by utf8
url = 'http://www.baidu.com/'; 
html = urlread(url)

那么有没有办法从html中正确地重建字符串? 我尝试过如下,但它没有用:

>> bytes = unicode2native(html,'utf8');
>> str = native2unicode(bytes,'gb2312')

但是,我知道有办法解决urlread的问题: 在控制台中键入edit urlread.m,然后将代码替换为第108行(在matlab 2011B中):

output = native2unicode(typecast(byteArrayOutputStream.toByteArray','uint8'),'UTF-8');

由:

output = native2unicode(typecast(byteArrayOutputStream.toByteArray','uint8'),'gb2312');

保存文件,现在urlread适用于gb2312编码的网站。 实际上,这个解决方案指出了为什么urlread有时无效。方法urlread总是使用utf8字符集来编码字符串,即使内容不是由utf8编码。

1 个答案:

答案 0 :(得分:0)

您似乎已经有了解决方案,只需创建一个名为urlread_gb的函数,该函数可以读取gb2312