Mathematica中文编码相关

2016-10-07  本文已影响495人  周瑶

结合Python进行编码转码

Mathematica对中文的支持还算不错,不过有时导入中文文本时也会出现乱码问题。原因是Mathematica在中文上仅支持UTF-8、Unicode、CP936及CP949,后两者一般很少使用,因此如果文件的编码方式是GB18030或者GB2312及GBK,导入时就会出现乱码。出现这样的问题时,可以用文本编辑器打开文本(本人使用的时Notepad++)将其转换为UTF-8的编码方式然后保存。

不过当文件数很多时,手动打开再保存的方式就行不通了。此时可以用Python对文件进行批量处理。至于为什么不直接用Python处理中文文本则是因为Mathemaica在代码易用性和丰富的函数库上要优于Python。

在测试时将一串中文文本写入Notepad++,用编码方式GB2312保存,然后用Mathematica导入,此时出现乱码。然后用Python打开则不会出现乱码,接着只要将文本的内容用UTF-8编码保存即可。代码如下。


#读取文本内容

with open('test.txt','r') as file:

text=file.read()

#将文本内容用UTF-8保存

with open('test1.txt','wb') as file:

file.write(text.encode('utf8'))

其中,encode()用于将字符串用其它编码方式进行编码,返回的类型为bytes。因此在open()函数中需要指定为wb。此时再用Mathematica来Import就不会有问题了。如果需要显式地在Import[]过程中指定编码方式为UTF-8,可以使用Import[path, CharacterEncoding -> "UTF8"]。

UTF-8中文编码范围

在中文自然语言的处理过程中,有时还会存在着删除非中文字符的以更好对对文本进行统计的问题。UTF-8中中文编码范围为u4e00-u9fa5,对应十进制为19968-40869。因此如果 我们需要判断一个字符是否为中文字符,只需要在Mathematica中用以下代码即可。


# <= 40869 && # >= 19968 & /@ ToCharacterCode["知行合一"]

此语句可以输出字符串中每个字符是否为中文。另外Mathematica中与编码相关的函数为FromCharacterCode[_List]可用于将编码转换为具体字符。

上一篇下一篇

猜你喜欢

热点阅读