美文网首页
Mathematica中文编码相关

Mathematica中文编码相关

作者: 周瑶 | 来源:发表于2016-10-07 21:32 被阅读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]可用于将编码转换为具体字符。

    相关文章

      网友评论

          本文标题:Mathematica中文编码相关

          本文链接:https://www.haomeiwen.com/subject/waayyttx.html