編集質問をより明確にするためにいくつかの新しい情報を追加しました。
2012B より前の初期の matlab ではurlread
、Web コンテンツの文字セットが utf8 でない場合、メソッドは間違った文字セットで作成された文字列を返します。(Matlab 2012Bでは多少改善されています)
例えば
% a chinese website whose content encoding by gb2312
url = 'http://www.cnbeta.com/articles/213618.htm';
html = urlread(url)
Matlab が gb2312 の代わりに utf8 を使用して html をエンコードしたためです。HTML の漢字が正しく表示されないことがわかります。
utf8 でエンコードされた中国語の Web サイトを読むと、すべて正常に動作します。
% 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 でエンコードされた Web サイトで機能するようになります。urlread
実際、このソリューションは、いつか機能しない理由を指摘しています。このメソッドurlread
は、コンテンツが utf8 でエンコードされていない場合でも、常に utf8 文字セットを使用して文字列をエンコードします。