-
Matlab
使用
urlread()
读取网页乱码问题
事先声明这是本人在网上找到的(
/
2012-05/
)
,非
原创:
Matlab
的
urlread()
函数可以读取网页,调用语法:
S =
urlread('URL','method',PARAMS)
共有三个参数,第
一个是网页地址,第二个是
get
或是
post
,意思很直白;第三个则是要向
网页传递的参数,详细
见
help
文档。本博文的这个问题不是重点。
重点在于,用这个读取中文网页会乱码。例如:
S=
urlread('');
自己去看
S
的内容,里面凡是应该是中文文字的部分都是问号。
<
/p>
3
年前,我写
Matlab
基础班讲义的时候实际已经把这个问题解决了,但是没有记录下来,
这次又遇
上同样的问题,一下子记不起来了(翻开当年讲义,看到自己写到
“
这个问题可以
通过手工修改
urlread()
函数解决
”
,感到很愤慨,多写一句我就不用费那
劳什子的精神了)
废话打住,<
/p>
下面开工修理
urlread()
函数,
让它能够正常搞中文网页
(注我用的是
2012A
版本,
其他版本可能有变化)
。在
Matlab
中输入
edit
urlread
打开函数代码文件。
修改
1
:
修改第一行的函数定义,本来是三个参数,在最后添加一个。
例如,我修改后:
function
[output,status] =
urlread(urlChar,method,params,webencoding)
在下面添加一句
if
nargin<4; webencoding='UTF-8'; end
作用是与修改前的函数调用语法兼容。
修改
2
:
<
/p>
修改参数数量检验语句,该语句位于文件中偏前部,例如原来是
n
arginchk(1,3)
改
为
na
rginchk(1,4)
修改
3
:
修改文件尾部的数据转换语句,它原本是:
output =
native2unicode(typecast(Array','uint8'),'UTF-8');
用
webencoding
替换
'UTF-8'
,注意包括单引号也要替换。
搞定了,
然后再读取网页。
一般中文网
页的网页编码是
'GBK'
(
兼容
p>
’GB2312'
)
,
调用语法是:
S=urlread('','get','','GBK')
这样返回来的文字里面就可以正常显示中文了。
为了方便大家修改,我把改好后的代码和未改的原代码
放在了下一页,就这一点是比原文
多的,也是害怕自己忘了。要是嫌麻
烦,就把下一页的代码复制粘贴过去,覆盖源代码,不
过别忘了把原代码保留一份,免得
忘了怎么改回来。
修改后的代码:
function [output,status] =
urlread(urlChar,method,params,webencoding)
if nargin<4;
webencoding='UTF-8';
end
%URLREAD Returns the contents of a URL
as a string.
%
S = URLREAD('URL') reads the content at
a URL into a string, S.
If
the
%
server returns binary data, the string
will contain garbage.
%
%
S =
URLREAD('URL','method',PARAMS) passes information
to the server as
%
part of the request.
The 'method' can be 'get',
or 'post' and PARAMS is a
%
cell array of
param/value pairs.
%
%
[S,STATUS] =
URLREAD(...) catches any errors and returns 1 if
the file
%
downloaded successfully and 0
otherwise.
%
%
Examples:
%
s = urlread('')
%
s
= urlread('ftp:///README')
%
s =
urlread(['file:///'
fullfile(prefdir,'history.m')])
%
%
From behind a firewall, use the
Preferences to set your proxy server.
%
%
See also URLWRITE.
%
Matthew J. Simoneau, 13-Nov-2001
%
Copyright 1984-2008 The MathWorks, Inc.
%
$$Revision: 1.3.2.10 $$ $$Date: 2008/10/02
18:59:57 $$
% This function
requires Java.
if ~usejava('jvm')
error('MATLAB:urlread:NoJvm','URLREAD
requires Java.');
end
import uptibleStreamCopier;
% Be sure the proxy settings are set.
xySettings
%
Check number of inputs and outputs.
error(nargchk(1,4,nargin))
error(nargoutchk(0,2,nargout))
if ~ischar(urlChar)
err
or('MATLAB:urlread:InvalidInput','The first input,
the URL, must be a character array.');
end
if (nargin > 1) &&
~strcmpi(method,'get') && ~strcmpi(method,'post')
p>
error('MATLAB:urlread:InvalidInput','Seco
nd argument must be either
end
% Do we want to throw
errors or catch them?
if nargout == 2
catchErrors = true;
else
catchErrors = false;
end
% Set default outputs.
output = '';
status = 0;
% GET method.
Tack param/value to end of URL.
if (nargin > 1) &&
strcmpi(method,'get')
if
mod(length(params),2) == 1
error('MATLAB:u
rlread:InvalidInput','Invalid parameter/value pair
arguments.');
end
for
i=1:2:length(params)
if (i == 1),
separator = '?'; else separator = '&'; end
param = char((params{i}));
value = char((params{i+1}));
urlChar = [urlChar separator param '='
value];
end
end
% Create a urlConnection.
[urlConnection,errorid,errormsg] =
urlreadwrite(mfilename,urlChar);
if
isempty(urlConnection)
if catchErrors,
return
else
error(errorid,errormsg);
end
end
% POST
method.
Write param/values
to server.
if (nargin > 1) &&
strcmpi(method,'post')
try
utput(true);
uestProperty(
...
'Content-
Type','application/x-www-form-urlencoded');
-
-
-
-
-
-
-
-
-
上一篇:深圳小学五年级上学期英语期末试题
下一篇:计算机英语词汇大全(整理)