2

編集質問をより明確にするためにいくつかの新しい情報を追加しました。

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');

ファイルを保存すると、urlreadgb2312 でエンコードされた Web サイトで機能するようになります。urlread実際、このソリューションは、いつか機能しない理由を指摘しています。このメソッドurlreadは、コンテンツが utf8 でエンコードされていない場合でも、常に utf8 文字セットを使用して文字列をエンコードします。

4

1 に答える 1

0

あなたはすでに解決策を持っているようです.urlread_gbを読むことができるという関数を作成するだけgb2312です.

于 2013-05-28T15:59:32.470 に答える