博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
阅读量:5971 次
发布时间:2019-06-19

本文共 2859 字,大约阅读时间需要 9 分钟。

  hot3.png

问题来源:

{查看同一字符串的双字节码和 UniCode 码}procedure TForm1.Button1Click(Sender: TObject);var  str1: AnsiString;  str2: UnicodeString; {string = UnicodeString}  P: PINT;begin  { "万一" 对应的双字节码是: BBD2F2CD }  str1 := '万一';  P := @str1[1];  ShowMessage(IntToHex(P^, 4)); //BBD2F2CD {万: F2CD; 一:BBD2 }  { "万一" 对应的 UniCode 码是: 4E004E07 }  str2 := '万一';  P := @str2[1];  ShowMessage(IntToHex(P^, 4)); //4E004E07 {万: 4E00; 一: 4E00}end;{知道双字节码, 如何转换为 UniCode: 两个字一起转}procedure TForm1.Button2Click(Sender: TObject);var  str1: AnsiString;  str2: string;begin  SetLength(str1, 4);  PInteger(@str1[1])^ := $BBD2F2CD;  Memo1.Lines.Add(str1); //万一  str2 := str1;  Memo1.Lines.Add(str2); //万一end;{逐字转}procedure TForm1.Button3Click(Sender: TObject);var  str1: AnsiString;begin  SetLength(str1, 2);  PWord(@str1[1])^ := $F2CD;  Memo1.Lines.Add(str1); //万  PWord(@str1[1])^ := $BBD2;  Memo1.Lines.Add(str1); //一end;
好像没有解决问题, 换个思路重来一下:

const  GB18030 = 54936;var  BytesGB18030: TBytes;{查看 Hex 的函数}function ToHex(p: PByteArray; b: Integer): string;var  i: Integer;begin  for i := 0 to b - 1 do    Result := IntToHex(p^[i], 2) + Chr(32) + Result;  Result := TrimRight(Result);end;{观察字符串以 GB18030 储存的编码}procedure TForm1.Button1Click(Sender: TObject);var  strHex: string;  StringStream: TStringStream;begin  StringStream := TStringStream.Create('万一的 Delphi 博客', GB18030);  BytesGB18030 := StringStream.Bytes;  Memo1.Lines.Add(StringStream.DataString);  Memo1.Lines.Add(ToHex(@BytesGB18030[0], Length(BytesGB18030)));  Memo1.Lines.Add('');  StringStream.Free;end;{观察字符串以 Unicode 储存的编码}procedure TForm1.Button2Click(Sender: TObject);var  strHex: string;  StringStream: TStringStream;begin  StringStream := TStringStream.Create('万一的 Delphi 博客', TEncoding.Unicode);  Memo1.Lines.Add(StringStream.DataString);  Memo1.Lines.Add(ToHex(@StringStream.Bytes[0], Length(StringStream.Bytes)));  Memo1.Lines.Add('');  StringStream.Free;end;{把从前面测试得到的字节数组 BytesGB18030 转换为 Unicode 字符串}procedure TForm1.Button3Click(Sender: TObject);var  StringStream: TStringStream;  str,strHex: string;begin  if Length(BytesGB18030) < 1 then Exit;  {直接根据字节数组建立 TStringStream}  StringStream := TStringStream.Create(BytesGB18030);  {TStringStream.DataString 就已经是标准的 string}  str := StringStream.DataString;  Memo1.Lines.Add(StringStream.DataString);  Memo1.Lines.Add(ToHex(@StringStream.Bytes[0], Length(StringStream.Bytes)));  Memo1.Lines.Add('');  Memo1.Lines.Add(str);  Memo1.Lines.Add(ToHex(@str[1], ByteLength(str)));  StringStream.Free;end;
(* Memo 中的测试结果:Memo1万一的 Delphi 博客CD BF A9 B2 20 69 68 70 6C 65 44 20 C4 B5 BB D2 F2 CD万一的 Delphi 博客5B A2 53 5A 00 20 00 69 00 68 00 70 00 6C 00 65 00 44 00 20 76 84 4E 00 4E 07万一的 Delphi 博客CD BF A9 B2 20 69 68 70 6C 65 44 20 C4 B5 BB D2 F2 CD万一的 Delphi 博客5B A2 53 5A 00 20 00 69 00 68 00 70 00 6C 00 65 00 44 00 20 76 84 4E 00 4E 07*)

转载于:https://my.oschina.net/hermer/blog/320264

你可能感兴趣的文章
交互设计[3]--点石成金
查看>>
SCCM TP4部署Office2013
查看>>
SVN: bdb: BDB1538 Program version 5.3 doesn't match environment version 4.7
查看>>
jsp内置对象作业3-application用户注册
查看>>
android115 自定义控件
查看>>
iOS uuchart 用法
查看>>
c# 多线程 调用带参数函数
查看>>
The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
查看>>
redis主从配置<转>
查看>>
karma如何与测试框架合作2之webpack
查看>>
10分钟搭建MySQL Binlog分析+可视化方案
查看>>
vmware虚拟机配置串口
查看>>
小型自动化运维--expect脚本之传递函数
查看>>
Nsrp实现juniper防火墙的高可用性【HA】!
查看>>
oracle11g 安装在rhel5.0笔记
查看>>
解决Lync 2013演示PPT提示证书问题的多种方法
查看>>
bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
查看>>
C++ 构造函数与析构函数
查看>>
ssh免密码登录
查看>>
Linux下Django环境安装
查看>>