字符编码
本文最后更新于:2 年前
不得不花时间重新理一遍,太乱了
仅个人理解,未经求证,警惕
总览
在C++中直接用 “” 来包裹字符串,它相当于是什么编码?
- 就是你这个cpp文件的编码,例如用GBK格式编写代码后运行,
"strlen("中文")"
的值为4;在utf-8格式下编写运行 这个值就为6
- 就是你这个cpp文件的编码,例如用GBK格式编写代码后运行,
路径字符串用什么编码能正确打开文件?
- windows下是GBK,因为windows系统是GBK编码的,也就是说,所有的这些路径名,文件名在系统内部都是GBK格式的,要和它们匹配上就要用GBK编码的字符串。
- 举例:如果我的cpp是utf-8保存的,使用
ifstream fin("中文.txt")
就没法正确打开,因为这个”中文.txt”字符串是utf-8编码的,需要转成GBK。 - 系统编码无法更改(你当然不能把windows内部所有字符串都转换一遍),只能在涉及到路径字符串时留意,格外转换一遍。
输出乱码了
- 以最简单的为例:windows下小黑框输出。cout其实也啥都不管,只把字节一个个扔给控制台,控制台采用系统编码方式来翻译成字符,所以一般utf-8格式的cpp直接cout << “中文”都会乱码,控制台有很多办法切换编码方式。
读写文件
- 它们什么都不管,只管把字节一个个读入或写出,那么你读的文件是什么编码,读到的字符串就是什么编码,写同理。
关于复制粘贴
- 我理解复制保存的是具体的字符而不是字节流,所以粘贴到哪里去都不会乱码
字符编码
http://www.lxtyin.ac.cn/2022/05/04/2022-05-04-字符编码/