Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效

目录

直奔主题

为什么字符集编码用ANSIC和UNICODE还不够,还需要使用UTF-8呢?

查看默认编码格式

windows批处理遇到的相关问题

CMake遇到的相关问题

C/C++字符编码转换

转换的目的

转换的原理

如何进行转换(代码页的选择问题)

举例


直奔主题

编译一个开源项目的时候发现读取char*指向的数据显示字符串中的字符无效

char *buff = "abc中文哈哈ccd";

默认的情况下,Visual Stdio 2017调试器只能正常显示ANSIC字符串和UNICODE字符串,而UTF-8字符串及其他代码页类型的字符串就不能正常显示了。但是其数据确实存在,由于这个不显示出来实际的内容有的时候可能导致对调试内容的误判(以为变量未赋值上,或者也不能知道数值是否正确)。

显示UTF-8的办法就是在监视的变量后边加一个,s8,如下图

Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效_第1张图片

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下查看当前控制台的代码页类型

Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效_第2张图片

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)相互转换

 

 

 

 

 

 

 

 

你可能感兴趣的:(编译器设置,跨语言设置,跨平台设置)