admin 管理员组文章数量: 887934
window系统默认编码格式GBK怎么理解?对我们在window 平台编码有什么影响呢?
在说明这个问题之前,我们先搞清楚 文件编码格式、编程语言中字节数组转字符串默认使用的编码格式、 操作系统默认的编码格式。
1.文件编码格式:指的是我们编写的代码保存的编码格式或者要读取文件的编码格式。
2.操作系统默认的编码格式:window 是GBK, Linux 是UTF-8。window 也是支持utf-8,只是需要特殊指定。还有一点win10 创建的文本文件默认都是UTF-8 编码(win7 GBK),这个和操作系统默认的编码格式 两码事。
3.编程语言的编码格式:比如说C++,java 语言,在我们需要将一个字节数组转成字符串时,默认使用的编码格式,这个编程语言会 以 当前操作系统的编码格式作为 默认的编码格式。这就是我们在window 下编程通常需要指定UTF-8 的原因。
说一个小案例: 使用C++读取一个 "日报.txt" 文件(内容utf-8编码),输出到控制台。
代码如下:
QFile f("日报.txt");
if(!f.open(QIODevice::ReadOnly|QIODevice::Text)){
qDebug()<<"打开文件失败";
return;
}
QTextStream is(&f);
//is.setCodec(QTextCodec::codecForName("utf-8"));
QString txt="",str="";
while(!is.atEnd()){
is>>str;
txt.append(str);
}
qDebug()<<txt;
f.close();
输出乱码,当修改 日报.txt 编码格式为GBK , 输出正常:
或者 明确指定字节数组转字符串使用 utf-8 也能正常输出。 代码为:
is.setCodec(QTextCodec::codecForName("utf-8"));
总结:
从上面的案例可以发现C++ byte数组转字符串时使用的就是操作系统编码GBK,而原数据是UTF-8 导致读取的数据乱码。
当我们读取 文件、数据发生乱码时,要先确认原数据的编码格式,而数据传输IO流肯定是以字节(二进制数据)的形式,不会发生乱码,关键是从字节数组转字符这个过程 使用的编码是否正确。总之原数据是什么编码,读取要使用对应的编码。其实严格来讲上面说的并不是什么转码,只是数据的还原。真正的转码应该是 原始数据GBK编码,你给我转成UTF-8,完成这种功能需要自己根据2个套编码表对照转换。
版权声明:本文标题:window系统默认编码格式GBK怎么理解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1733515781h1601288.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论