英文Windows远程调试日文MBCS应用时如何正常查看文本?
解决VS2013远程调试日文MBCS应用时的字符串乱码问题
针对你遇到的日文MBCS字符串在英文Win7+VS2013调试中显示乱码的问题,我有几个实用的方案,不用切换应用到Unicode也能搞定:
临时调整系统非Unicode语言设置
这是最直接的方法:打开控制面板→区域和语言→管理选项卡→点击“更改系统区域设置”,选择“日语”,重启电脑后,系统会默认用日文代码页(932)处理MBCS字符串,VS调试器就能正确解析并显示日文了。调试完成后再改回英文即可,这个设置只会影响非Unicode程序,不会改变系统界面语言。在VS调试器中手动转换字符串
如果不想改系统设置,可以在监视窗口或即时窗口里用C标准库函数做即时转换:- 监视窗口:添加监视项时,输入类似这样的表达式(替换
your_mbcs_string为你的变量名):
不过更简单的方式是用即时窗口分步转换:(wchar_t*)malloc((_mbstowcs(NULL, your_mbcs_string, 0)+1)*sizeof(wchar_t)), _mbstowcs_s(NULL, (wchar_t*)malloc((_mbstowcs(NULL, your_mbcs_string, 0)+1)*sizeof(wchar_t)), _mbstowcs(NULL, your_mbcs_string, 0)+1, your_mbcs_string, _mbstowcs(NULL, your_mbcs_string, 0)), (wchar_t*)malloc(...) - 即时窗口:输入以下命令:
执行后就能看到转换后的日文Unicode字符串了,注意缓冲区大小根据你的字符串长度调整。wchar_t temp_buf[2048]; errno_t err = _mbstowcs_s(NULL, temp_buf, sizeof(temp_buf)/sizeof(wchar_t), your_mbcs_string, _TRUNCATE); temp_buf
- 监视窗口:添加监视项时,输入类似这样的表达式(替换
自定义VS调试可视化工具(Natvis)
如果你经常需要调试这类MBCS应用,可以创建一个自定义可视化规则,让VS自动转换显示:- 在VS的安装目录下(比如
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers)新建一个.natvis文件,比如MBCS_Japanese.natvis - 写入以下内容:
<?xml version="1.0" encoding="utf-8"?> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="char*"> <DisplayString Condition="this != nullptr">日文MBCS: {[System.String]System.Text.Encoding.GetEncoding(932).GetString((byte*)this, strlen(this))}</DisplayString> </Type> <Type Name="char[]"> <DisplayString>日文MBCS数组: {[System.String]System.Text.Encoding.GetEncoding(932).GetString((byte*)this, $length)}</DisplayString> </Type> </AutoVisualizer> - 重启VS后,调试时查看
char*或char[]类型的变量,就会自动显示转换后的日文了。这个方法利用了.NET的编码转换功能,无需修改系统设置。
- 在VS的安装目录下(比如
调整远程调试目标机器的区域设置
如果你的远程调试目标机器是英文系统,同样需要把它的“非Unicode程序的语言”改成日语,这样调试器从远程获取的MBCS字符串会用正确的代码页解析,本地VS就能正常显示了。
这些方法都不需要修改应用的编码格式,完全适配你当前的MBCS环境。
内容的提问来源于stack exchange,提问作者Joseph Willcoxson
相关产品推荐
相关产品推荐

