Mathematica编码笔记

@2015-9-4

1

CP936,Unicode, UTF-8, WindowsANSI是几个我最常接触到的编码,特别是文本文件。

ExportString编码设置无效的问题

ref

通常我们在ImportExport的时候,会有一些编码设置,比如CharacterEncoding


Mathematica编码笔记_1.png

Mathematica编码笔记_2.png

比如此时,Windows 10@x64@Mma10.2英文版

Windows

输入文档编码:UTF8


Mathematica编码笔记_3.png

Mathematica编码笔记_4.png


Mathematica编码笔记_5.png

Mathematica编码笔记_6.png


Mathematica编码笔记_7.png

Mathematica编码笔记_8.png

ExportString生成的跟以UTF8编码再以Unicode解码是一样的

而逆向解码则可以先以CP936编码再以UTF8编码解析


Mathematica编码笔记_9.png

Mathematica编码笔记_10.png


Mathematica编码笔记_11.png


Mathematica编码笔记_12.png

Mathematica编码笔记_13.png

许多时候遇到乱码问题,一般找到合适的两个encode和decode都能有一个好的效果,有时是要看起来是中文,有时是虽然看起来不是好的中文,但是输出到文件或其他地方时可以是好的中文。

当然,这里JSON的问题可能是Intended的,因为帮助里有这么一句话,以UTF8编码的,而看到Szabolcs的answer后我又试了下


Mathematica编码笔记_14.png


Mathematica编码笔记_15.png

Mathematica编码笔记_16.png


Mathematica编码笔记_17.png

Mathematica编码笔记_18.png


Mathematica编码笔记_19.png

Mathematica编码笔记_20.png


Mathematica编码笔记_21.png

Mathematica编码笔记_22.png

当然具体使用看场景了,是要看到是[中文]的字符串,还是看到不是[中文]显示的字符串.

总之,从我的使用经验来说,接受了CharacterEncoding的选项又无效,是一件不舒服的事情,实际使用中,能够接受选项并改变会好些。

RawJSON

看到RawJSON在ExportString中文时的表现跟JSON是有区别的,


Mathematica编码笔记_23.png

Mathematica编码笔记_24.png

当是这是一个普遍现象

HTMLFragment


Mathematica编码笔记_25.png

Mathematica编码笔记_26.png


Mathematica编码笔记_27.png

Mathematica编码笔记_28.png

FileTemplateApply文件编码的问题

FileTemplateApply会把一个UTF8编码的文件改成ANSI格式的文件,并且不接受Encoding的选项,这点是非常不方便的,因为许多时候我们要文件的格式是可以指定的,比如Jekyll静态博客的文档都会要求是无BOM-UTF8,如果再输入输出一次,又体现不出FileTemplateApply的方便了。

另一个方式是,Import后使用TemplateApply再Export,即自定义一个fileTemplateApply

FileTemplateApply默认会把中文变成ASCII再输出,类似下面的ToString的效果


Mathematica编码笔记_29.png

Mathematica编码笔记_30.png

FilePrint的问题

FilePrint是预览文件的一个很好的函数,很早就引入了,但是有中文就只能呵呵了,Wolfram在中文处理的一些细节上一直没有怎么改进。
下面的状况一个是文件是UTF-8格式的,一个是ANSI格式存的,用记事本打开右键另存时可以选,内容都是无BOM-UTF8编码


Mathematica编码笔记_31.png

什么


Mathematica编码笔记_32.png

ʲô

C编译器调用Debug信息的乱码

Mathematica编码笔记_33.png

可能的一个方案是使用一个样式表,其中Output的单元进行自动单元计算,经过字符串处理,使得中文的部分使用使得

Read/ReadList

Read中文的时候也会有一个乱码的问题,然后加个encode的后果是在大文件时Read/ReadList本来很快,结果加了编解码操作占用大量时间和内存。

JLink-JavaConsle

ref

其他

10.01有一个不识别中文路径的Bug,后来已修复。

PDF另存为有一个乱码的情形,后来已修复。

其他软件里应用时也会遇到类似的问题,所以习惯就凑合就好,如果工具用多了,有的时候在命令行里,ls一个路径什么的也有中文显示不正常的情况。

下面是用PythonSDK调用七牛云图床API时遇到的编码小问题,Python不识别中文路径

Mathematica编码笔记_34.png