目录
直奔主题
为什么字符集编码用ANSIC和UNICODE还不够,还需要使用UTF-8呢?
查看默认编码格式
windows批处理遇到的相关问题
CMake遇到的相关问题
C/C++字符编码转换
转换的目的
转换的原理
如何进行转换(代码页的选择问题)
举例
直奔主题
编译一个开源项目的时候发现读取char*指向的数据显示字符串中的字符无效
char *buff = "abc中文哈哈ccd";
默认的情况下,Visual Stdio 2017调试器只能正常显示ANSIC字符串和UNICODE字符串,而UTF-8字符串及其他代码页类型的字符串就不能正常显示了。但是其数据确实存在,由于这个不显示出来实际的内容有的时候可能导致对调试内容的误判(以为变量未赋值上,或者也不能知道数值是否正确)。
显示UTF-8的办法就是在监视的变量后边加一个,s8,如下图
MSDN官网网址阐述的其他格式(Format specifiers for C++ in the Visual Studio debugger):
https://docs.microsoft.com/en-us/visualstudio/debugger/format-specifiers-in-cpp?view=vs-2019
相关内容参考以下两篇文章
让VS调试器正确显示UTF-8字符串
跨平台C/C++代码编码问题
一般打开文件不要使用notepad,推荐使用Notepad++、UltraEdit这两个都是比较好的文本编辑器,能查看到文件的编码格式等特殊信息。
为什么字符集编码用ANSIC和UNICODE还不够,还需要使用UTF-8呢?
这里涉及一个实际的问题就是在写跨平台的代码时,同一个文件的代码不仅要在windows平台上使用,还需要再Linux上或者是Mac使用。
windows OS区域语言设置为中文时,Visual Stdio 2017默认的文件编码时GB2312,并且系统控制台的编码格式为GBK。可以在cmd下查看当前控制台的代码页类型
Linux系统默认文件编码都是UTF-8的,Mac上未调查
查看默认编码格式
如果对编码不太熟悉,建议查看常用的开发环境,或者编辑器的默认编码格式
查看【Visual Stdio】默认编码格式
查看【QtCreater】默认编码格式
查看【Sublime Text】默认编码格式
查看【gVim】默认编码格式
查看【浏览器】默认编码格式
查看【Visual Studio Code】默认编码格式
查看【PhpStorm】默认编码格式
windows批处理遇到的相关问题
我之前写了一段windows的批处理,其中输出内容有中文,如下面的语句
ECHO "输出中文测试,是否为乱码"
通过VS调用脚本输出到VS的输出窗口,和直接执行批处理脚本时,有时编码设置的不对就会出现输出的内容为乱码
CMake遇到的相关问题
使用CMake编写跨平台的CMakelists.txt文件时,一定要注意CMakelists.txt文件的编码格式,这个决定了由CMake生成的项目解决方案下能否正常显示CMakelists.txt的中文信息有关。
C/C++字符编码转换
转换的目的
转换的原理
如何进行转换(代码页的选择问题)
举例
- 多字节、UTF-8相互转换
- 宽字节(UNICODE)、UTF-8相互转换
- 多字节、宽字节(UNICODE)相互转换
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2017anzhuangwenti/2020/0725/5272.html