Mathematica中文编码相关
结合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]可用于将编码转换为具体字符。