DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 33227
今日帖子: 17
在线用户: 8
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
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 说是访问了低位内存。但是依然不知道我该怎么做
----------------------------------------------
-
作者:
男 blueflag (昆了) ★☆☆☆☆ -
盒子活跃会员
2021/7/26 8:55:38
1楼: 在delphi 10.4.2 中,这样的输出正常:
var
  Msg : string;
begin
  OutputDebugString('中国');
  Msg := '中国china';
  OutputDebugString(PChar(Msg));
end;
所以你需要看一下你的delphi设置,实在找不出来问题,就重装一下delphi
----------------------------------------------
-
作者:
男 stacker (OOP才是王道) ★☆☆☆☆ -
普通会员
2021/7/26 11:17:48
2楼: 你的代码也要用utf8格式储存的,不然有可能也会失败
----------------------------------------------
-
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
2021/7/26 12:44:01
3楼: @stacker

和代码文件保存的编码怎么可能有关呢?实测也是 一样的乱码

@blueflag
中国 这几个字本就是正常的
你试试输出  取
----------------------------------------------
-
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2021/7/26 15:12:17
4楼: 在我机器上没一点问题啊:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
begin
  s:='汉字测试';
  outputdebugstring(PWideChar(s));
end;
此帖子包含附件:
PNG 图像
大小:7.9K
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2021/7/26 15:18:20
5楼: 注意, 在 view|debug windeows|Events中去查看
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
2021/7/26 15:38:54
6楼: @hardnut

我说的是部分字
比如 取

你试试输出 取 看看
----------------------------------------------
-
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2021/7/26 17:19:10
7楼: 是有这个毛病, "取"不行,但"取中文"可以
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
2021/7/26 22:49:02
8楼: @hardnut

取只是个案例

还有其他字 一下子 没找到。上次发过一个帖子。lsuper回复是说 访问了低位内存
但是我不懂汇编 也不知道该咋办
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
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;
----------------------------------------------
武汉天气不好
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
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的代码并没有公开。
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2021/7/28 10:46:18
12楼: delphi IDE拦截了Outputdebugstring的数据流,显示的时候出了问题
用MS的dbgviewer可以正常显示“取”
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
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
作者:
男 142857 (142857) ★☆☆☆☆ -
禁用账号
2021/7/28 15:39:58
14楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
2021/7/30 8:54:26
15楼: @wr960204

总感觉这个办法 有点歪门邪道啊  先utf8编码 然后转Ansichar

所以不知道是不是有啥正确的用法我不会
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2021/7/30 11:21:12
16楼: 如果消费者对输入数据的兼容性不好
生产者就把输出数据调配成消费者兼容的形式
应该算是很“正道”的做法
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行687.5毫秒 RSS