鱼C论坛

 找回密码
 立即注册
查看: 769|回复: 2

[已解决]乱码

[复制链接]
发表于 2023-10-9 20:47:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
; 使用 Win32ASM 写的 Hello, world 程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Hello.asm
; Link /subsystem:windows Hello.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat,stdcall
                option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                \masm32\include\windows.inc
include                \masm32\include\user32.inc
includelib        \masm32\lib\user32.lib
include                \masm32\include\kernel32.inc
includelib        \masm32\lib\kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data
szCaption        db        '来自鱼C工作室', 0
szText                db        'Hello, World !', 0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
start:
                invoke        MessageBox,NULL,offset szText,offset szCaption,MB_OK
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start




如图:编译链接之后,执行时中文是乱码  ?


最佳答案
2023-10-9 20:48:15
这是因为在代码中使用了中文字符,而编译器默认使用的字符集与系统默认字符集不一致导致的。解决方法是在代码开头添加以下语句:
.586
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.code
start:
    sub esp, 8
    push 0
    push offset szCaption
    push offset szText
    push 0
    call MessageBoxW
    add esp, 16
    push 0
    call ExitProcess
end start

在代码中使用  MessageBoxW  而不是  MessageBox ,并将  szCaption  和  szText  的类型从  db  改为  dw ,同时在字符串前添加  L  来表示它们是 Unicode 字符串。这样就可以正确地显示中文字符了。
1111.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-9 20:48:15 | 显示全部楼层    本楼为最佳答案   
这是因为在代码中使用了中文字符,而编译器默认使用的字符集与系统默认字符集不一致导致的。解决方法是在代码开头添加以下语句:
.586
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.code
start:
    sub esp, 8
    push 0
    push offset szCaption
    push offset szText
    push 0
    call MessageBoxW
    add esp, 16
    push 0
    call ExitProcess
end start

在代码中使用  MessageBoxW  而不是  MessageBox ,并将  szCaption  和  szText  的类型从  db  改为  dw ,同时在字符串前添加  L  来表示它们是 Unicode 字符串。这样就可以正确地显示中文字符了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-9 20:53:06 | 显示全部楼层
用记事本打开,另存为ANSI编码就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表