C++/C:char* 或者string在内存中的编码方式是更具文件的编码格式而定的,会根据文件的编码直接读入字符串,显示的时候按照控制台的格式来显示,如果控制台不支持一些格式,那么就会乱码。
python2:python文件头规定的编码格式 # -*- coding: utf-8 -*-,解释器会根据这个编码读取字符串,如果没有指定,默认以asc编码读取,字符串在内存中的编码方式是utf-8的方式,显示的时候会自动转换成unicode编码的格式。
python2中的decode("utf-8")是将utf-8的编码格式转换成unicode编码格式
python3中解释器默认的读取文件的编码格式是utf-8,当然也可以自己指定编码,python3中字符串在内存中的存储的形式是unicode编码,如果需要存储到文件需要进行编码成utf-8,encode("utf-8"),也可以存储成unicode编码,但是文件中会乱码。
需要说明一下,utf-8和unicode是两种不同的编码方式,utf-8显示的时候需要转换成unicode,然后在unicode表中查询对应的符号,unicode占2个字节(不管哪种语言),utf-8是不定长,单字节编码。由于unicode占用两个字节,所以转换成unicode的中文可以用len求出长度,如果是utf-8的话是不定长的,只能求出占用的字节数。
python3中严格区分了字节和字符串,或者说只有字节和unicode的编码。
GO:GO字符串在内存中采用utf-8的编码格式存储,这个和python2很像。所以GO语言直接读取utf-8的文件就很好处理。