|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2021/7/26 4:04:10 |
标题: |
OutPutdebugString 部分字 死活都不能正确输出 |
浏览:1679 |
|
加入我的收藏 |
楼主: |
测试1: var str:string:='取'; outputdebugstring(pchar(s)); 测试2: outputdebugstring('取'); 测试3: var s:widechar:='取'; outputdebugstring(pchar(s)); 测试4: var str:string:='取'; outputdebugstringA(Pansichar(utf8encode(s))); 成功输出正确的 取
谁能告诉我 到底该怎么正确输出。上一次 lsuper 说是访问了低位内存。但是依然不知道我该怎么做
----------------------------------------------
- |
作者: |
|
2021/7/26 8:55:38 |
1楼: |
在delphi 10.4.2 中,这样的输出正常: var Msg : string; begin OutputDebugString('中国'); Msg := '中国china'; OutputDebugString(PChar(Msg)); end; 所以你需要看一下你的delphi设置,实在找不出来问题,就重装一下delphi
----------------------------------------------
-
|
作者: |
|
2021/7/26 11:17:48 |
2楼: |
你的代码也要用utf8格式储存的,不然有可能也会失败
----------------------------------------------
-
|
作者: |
|
2021/7/26 12:44:01 |
3楼: |
@stacker
和代码文件保存的编码怎么可能有关呢?实测也是 一样的乱码
@blueflag 中国 这几个字本就是正常的 你试试输出 取
----------------------------------------------
-
|
作者: |
|
2021/7/26 15:12:17 |
4楼: |
在我机器上没一点问题啊: procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s:='汉字测试'; outputdebugstring(PWideChar(s)); end;
此帖子包含附件:
大小:7.9K |
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
|
作者: |
|
2021/7/26 15:38:54 |
6楼: |
@hardnut
我说的是部分字 比如 取
你试试输出 取 看看
----------------------------------------------
-
|
作者: |
|
2021/7/26 22:49:02 |
8楼: |
@hardnut
取只是个案例
还有其他字 一下子 没找到。上次发过一个帖子。lsuper回复是说 访问了低位内存 但是我不懂汇编 也不知道该咋办
----------------------------------------------
-
|
作者: |
|
2021/7/27 7:20:01 |
9楼: |
这样是可行的(在 DebugView 中查看,不能在 Delphi 查看):
procedure TForm1.FormCreate(Sender: TObject); var strTemp: String; chrTemp: array [0 .. 1] of Char; begin strTemp := '取'; chrTemp[0] := Char(strTemp[1]); chrTemp[1] := Char(0); OutputDebugString(chrTemp); end;
----------------------------------------------
武汉天气不好
|
作者: |
|
2021/7/27 10:27:19 |
10楼: |
@dbyoung
用DebugView查看的话 必须得脱离IDE调试吧
----------------------------------------------
-
|
作者: |
flcop (flcop) |
▲▲▲▲△ |
-
|
普通会员 |
|
2021/7/27 15:10:25 |
11楼: |
这应该和IDE如何解析数据有关,OutputDebugStringW在绝大多数情况下,并不会调用它本身,而是内部调用了OutputDebugStringA,这就导致了系统将字符串转自动成了Ansi字符串,这样当IDE从共享内存取得输出数据时,很可能首先尝试转化成utf8,如果失败则再尝试转成本地字符串或者Unicode字符串显示。以你的例子,"取"应该是以Ansi版的uft8格式显示了,所以就乱码了,当然了这个数据转成过程仅仅是猜测,因为IDE的代码并没有公开。
----------------------------------------------
-
|
作者: |
|
2021/7/28 10:46:18 |
12楼: |
delphi IDE拦截了Outputdebugstring的数据流,显示的时候出了问题 用MS的dbgviewer可以正常显示“取”
----------------------------------------------
-
|
作者: |
|
2021/7/28 14:33:24 |
13楼: |
跟Outputdebugstring这个API没关系,是IDE的问题。 取字在IDE看不了,但是在DbgView中看到的是正确的
我大胆猜想一下,DbgView可能判断了编码,IDE编码识别这里没处理好
你都找到解决办法了,为啥不自己封装一下呢 procedure OutputDbgStr(s : String); begin OutputDebugStringA(PAnsiChar(Utf8Encode(s))); end;
----------------------------------------------
武稀松http://www.raysoftware.cn
|
作者: |
|
2021/7/28 15:39:58 |
14楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2021/7/30 8:54:26 |
15楼: |
@wr960204
总感觉这个办法 有点歪门邪道啊 先utf8编码 然后转Ansichar
所以不知道是不是有啥正确的用法我不会
----------------------------------------------
-
|
作者: |
|
2021/7/30 11:21:12 |
16楼: |
如果消费者对输入数据的兼容性不好 生产者就把输出数据调配成消费者兼容的形式 应该算是很“正道”的做法
----------------------------------------------
-
|
|