文档章节

知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 554
阅读 5
收藏 0
点赞 0
评论 0

问题来源: http://www.cnblogs.com/del/archive/2008/09/05/1284923.html#1818187

{查看同一字符串的双字节码和 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
*)

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
Unicode ,UTF-8,assic, gbk, latin1编码

Unicode ,UTF-8,assic, gbk, latin1编码 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合...

xiaocao13140 ⋅ 06/04 ⋅ 0

ASCII,Unicode,UTF-8,GB2312一些关于编码的理解

字符编码:ASCII,Unicode,UTF-8,GB2312 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于...

lovedreamland ⋅ 2012/07/17 ⋅ 0

利用html5实现类似微信的手机摇一摇功能,并播放音乐,并且解决中文乱码的问题。

转载了@三井学长:http://blog.csdn.net/david1030/article/details/8229008 转载了@Hello Csn楠!:http://www.cnblogs.com/csn0721/ 1、 deviceOrientation:封装了方向传感器数据的事件,...

Oscarfff ⋅ 2015/04/02 ⋅ 0

谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码...

百变茄 ⋅ 2014/02/12 ⋅ 0

字符编码介绍及不同编码区别

UNICODE,GBK,UTF-8区别 简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉...

五大三粗 ⋅ 2015/11/03 ⋅ 0

UTF-8 GBK UTF8 GB2312 之间的区别和关系

UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含...

yangkai_2005 ⋅ 2012/09/05 ⋅ 1

深入分析Java中的中文编码问题

编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中...

lvzjane ⋅ 2012/11/29 ⋅ 2

深入分析 Java 中的中文编码问题

编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中...

IBMdW ⋅ 2011/07/07 ⋅ 20

从ASCII到UTF-8——字符集到底是什么?

这世界上大概有100万个字符,平均每个人一生接触的字符数在6k左右,那么问题来了,如何让计算机来存下所有的字符。 ASCII 计算机诞生于美国,起初用的是真空管的电位高低来表示0和1,8个真空...

ZxLee ⋅ 05/26 ⋅ 0

深入了解字符集和编码

一、什么是字符集?什么是编码? 字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。 一组抽象字符的集合就是字符集(Charset)。 字符集常常和一种具体的语言文字对应起来,...

AlphaJay ⋅ 2010/06/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud 微服务 (六) 服务通信 RestTemplate

壹 通信的方式主要有两种,Http 和 RPC SpringCloud使用的是Http方式通信, Dubbo的通信方式是RPC 记录学习SpringCloud的restful方式: RestTemplate (本篇)、Feign 贰 RestTemplate 类似 Http...

___大侠 ⋅ 11分钟前 ⋅ 0

React创建组件的三种方式

1.无状态函数式组建 无状态函数式组件,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。 无状态函数式组...

kimyeongnam ⋅ 18分钟前 ⋅ 0

react 判断实例类型

今天在写组件的时候想通过判断内部子元素不同而在父元素上应用不同的class,于是首先要解决的就是如何判断子元素的类型。 这里附上一个讲的很全面的文章: https://www.cnblogs.com/onepixel...

球球 ⋅ 25分钟前 ⋅ 0

Centos7备份数据到百度网盘

一、关于 有时候我们需要进行数据备份,如果能自动将数据备份到百度网盘,那将会非常方便。百度网盘有较大的存储空间,而且不怕数据丢失,安全可靠。下面简单的总结一下如何使用 bypy 实现百...

zctzl ⋅ 39分钟前 ⋅ 0

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 42分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 49分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 今天 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 今天 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 今天 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部