扩展ASCII码的显示问题

sunnyheart 2009-01-15 04:29:31
现在有2个ASCII,值分别是126,134和56
我要转换成char后组成字符串,用chr(126)+chr(134)+chr(56),结果是最后一个没了,只有两个字符;
改成WChar强制转化后,134对应的字符变成?,再转译成ascii的时候成了?对应的ascii。

有没有好办法?谢谢!
...全文
757 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
关键问题是,我加密后,在Delphi中即使能看到我要的内容,比如“~?8”,但是我写到一个文件中的时候,比如XML中
然后用二进制编辑器打开XML文件看,?位置对应的是3F,这就不对了
bdmh 2009-01-16
  • 打赏
  • 举报
回复
你好像明白了
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bdmh 的回复:]
两个?是不一样的,134的?不是ASCII表中的,他应该和另一个ASCII组成汉字的,134是一个非常规的?
[/Quote]

我明白,在扩展ASCII中,134是一个特殊字符
但是Delphi好像不能处理这些扩展ASCII,一旦我们把134转换成?后,delphi写到别的地方就认为是?的实际ASCII:3F(63)
c58342418 2009-01-16
  • 打赏
  • 举报
回复
bdmh 2009-01-16
  • 打赏
  • 举报
回复
两个?是不一样的,134的?不是ASCII表中的,他应该和另一个ASCII组成汉字的,134是一个非常规的?
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
上面两位的方法我都试了,都能显示?,但是我用二进制编辑器看加密后的内容,?对应的asc变成了3F

delphi就这么笨吗?
bdmh 2009-01-16
  • 打赏
  • 举报
回复
不用,我用edit显示chr(134)可以显示'?'
ljluck7687 2009-01-16
  • 打赏
  • 举报
回复
很明显后面一个字符是汉字,上面诸位的办法都无法解决这个问题,
只能用以下办法才能正确显示:

示例代码:

var
i:integer;
ss:string;
begin
i:=134*256+56;
ss:=widechar(i);
edit1.Text:=chr(126)+ss;
end;

其中最关键的是要用widechar这个函数
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bdmh 的回复:]
大于127的,用一个edit去显示,然后去edit的值吧,办法虽然恶心了点,但可行
[/Quote]

多谢
不过edit需要设置什么字符集吗?我试了好像还是不行呢?
bdmh 2009-01-16
  • 打赏
  • 举报
回复
大于127的,用一个edit去显示,然后去edit的值吧,办法虽然恶心了点,但可行
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 window_8888 的回复:]
chr处理的是0-127范围内的东西.超出这个范围,要另作处理.否则不正确
汉字的编码都超出128,得另行处理
[/Quote]

怎么处理?
不管显示什么,只要能显示出来就行
window_8888 2009-01-16
  • 打赏
  • 举报
回复
chr处理的是0-127范围内的东西.超出这个范围,要另作处理.否则不正确
汉字的编码都超出128,得另行处理
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 starluck 的回复:]


一個char 只是一字節你放三個字符進去怎麼行呢??
[/Quote]

是3个char强制转化成WChar后放在string内
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
问题出在chr(134),他不象那两个能直接转成字符 ,因为134已经超出了ASCII的编码范围
chr(126)='~'
chr(56)='8'
chr(134)=#134
单独处理一下134,或者把134放在最后
[/Quote]

是个加密算法,顺序不可能改变的
sunnyheart 2009-01-16
  • 打赏
  • 举报
回复
解决了,我忘了用WideString保存了
谢谢各位
fangsp 2009-01-15
  • 打赏
  • 举报
回复
大于128的 基本上为不可见字符了
simonhehe 2009-01-15
  • 打赏
  • 举报
回复
过滤下传入的ascii值
bdmh 2009-01-15
  • 打赏
  • 举报
回复
ASCII码中,第0~32号及第127号是控制字符,常用的有LF(换行)、CR(回车);第33~126号是字符 ,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母 ,其余的是一些标点符号、运算符号等。
bdmh 2009-01-15
  • 打赏
  • 举报
回复
问题出在chr(134),他不象那两个能直接转成字符 ,因为134已经超出了ASCII的编码范围
chr(126)='~'
chr(56)='8'
chr(134)=#134
单独处理一下134,或者把134放在最后
starluck 2009-01-15
  • 打赏
  • 举报
回复


一個char 只是一字節你放三個字符進去怎麼行呢??
加载更多回复(1)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧