win32汇编MessageBox显示中文乱码

迈不过友情╰ 2023-01-09 14:27 403阅读 0赞

因为我对字符编码的问题完全是一个小白,所以在学习汇编的过程中出现了下面的这种错误,特意记录和学习一下。

文章目录

  • 1.问题描述
  • 2.解决方法

1.问题描述

在使用Windows API函数MessageBox时,出现了中文乱码现象:

在这里插入图片描述

源码如下所示:

  1. ;*******************************************************
  2. ;我的第一个32位汇编程序
  3. ;*******************************************************
  4. ;HelloWorld.asm
  5. ;*******************************************************
  6. ;使用nmake或下列命令进行编译和链接
  7. ;ml /c /coff HelloWorld.asm
  8. ;Link /subsystem:windows HelloWorld.obj
  9. ;*******************************************************
  10. ;模式定义,初始化参数
  11. .386 ;使用80386处理器指令集
  12. .model flat,stdcall ;用来定义程序工作的模式,flat:内存模式,stdcall:语言模式
  13. option casemap:none ;是否对变量与子程序名大小写敏感,必须要进行设置
  14. ;*******************************************************
  15. ;include头文件
  16. ;*******************************************************
  17. include windows.inc
  18. include user32.inc
  19. includelib user32.lib
  20. include kernel32.inc
  21. includelib kernel32.lib
  22. ;*******************************************************
  23. ;数据段
  24. ;*******************************************************
  25. .data
  26. szCaption db '标题',0
  27. szText db '你好,世界!',0
  28. ;*******************************************************
  29. ;代码段
  30. ;*******************************************************
  31. .code
  32. start:
  33. invoke MessageBox,NULL,offset szText,\
  34. offset szCaption,MB_OK
  35. invoke ExitProcess,NULL
  36. ;*******************************************************
  37. end start

2.解决方法

首先要特别注意的是:ANSI(American National Standards Institute,美国国家标准学会)编码并不是ASCII码,之前一直没注意啊,所以今天就出现问题了。因为我之前一直都是用utf-8编码来编写文档的,而Windows在早期的发展过程中一直使用的都是ANSI编码,这套编码好像不同的地区都有着一套不同的标准,我们国家的标准是GB2312(后面扩展为GBK字符集),不像现在的Unicode编码,所以说ANSI编码更像是一个字符编码的集合。
由于ANSI编码与utf-8编码(英文字符占一个字节,中文字符占多个字节)并不相同, 所以就会导致许多ANSI编码的软件库不能使用,而微软为了不损失掉这庞大的软件库,所以它就搞出来了一个BOM标签,也就是通过这个BOM标签来区分ANSI编码与Unicode编码,这样就可以两者兼得。

既然知道了这其中的缘由,那么就修改起来就变得比较容易了,只需要进行下面的操作就行了。
在这里插入图片描述

之后再重新编译链接程序,运行结果如下:
在这里插入图片描述

所以不得不吐槽一下Windows,有的时候程序出现问题它总给你这种感觉:别问,问就是历史遗留问题*^*。

参考资料:
https://blog.csdn.net/imxiangzi/article/details/77370160
https://www.zhihu.com/question/20650946

发表评论

表情:
评论列表 (有 0 条评论,403人围观)

还没有评论,来说两句吧...

相关阅读