加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MATLAB中的汉字编码

(2013-11-10 16:22:22)

网上搜索的,转载别人的经验,经过自己实验,这个方法是可行的。

 

假设变量label='日',是一个汉字字符,从matlab的workspace可以看到,变量的大小为1×1。

实际占用两个字节。

可以通过执行double(label)看到这两个字节的unicode编码,这里是26085。

可以通过unicode2native转成本地编码,例如:

yyy=unicode2native(label,'CP936')

可以看到yyy是个长度为2的数组了,即它的大小在workspace中显示为2×1。

其中yyy(1)的值为200,即十六进制编码的C8,yyy(2)的值为213,即十六进制编码的D5。

通过执行native2unicode,又可以吧yyy转回unicode编码。

一般情况下,你从文件中读出来的汉字,最初的编码是native形式,要转成unicode形式,才可以显示出来。

而当你把汉字写入文件时,也要先转换成native形式,才可以写。

下面以这两个过程的一个实例作为本文的结束。

% 
% 假设二进制文件mytest里包含一个“日”字,
% 要把它显示出来,并要求写到另一个文件yourtest里。
% 
% Su, Tonghua
% Sep. 17, 2009

fiIn=fopen('mytest.txt','r');%打开待读取文件
label=native2unicode(fread(fiIn,2,'uchar'),'CP936');%读取文件并转成unicode编码
disp(label);%显示汉字
fiOut=fopen('yourtest.txt','wt');%打开待写入文件
fwrite(fiOut,sprintf('%s\n',char(unicode2native(label,'CP936'))));%转换成本地编码并写入文件

 

另外,

一直为GB2312,GBK,GB18030和CP936之间的关系头痛,今天得到Python群里一位高人指点,明白了cp936就是指系统里第936号编码格式,也就是GB2312。

可以看表:

936 gb2312 简体中文(GB2312)

 

2、[msg,len]=fread(Txt_id,'ubit1');这条语句中,对应于Txt中的字符来说,msg读出的二进制码是按照从低位到高位的顺序排列的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有