码页即为字符集编码,也称为"内码表"。

在Unicode出现以前,计算机依靠不同的代码页来显示不同的语言。我们最常用的代码页有两个:936 简体中文和437 英文。

Delphi中可以为AnsiString指定代码页。

 

type
  TStr = type AnsiString(936);
var
  S: TStr;

 

 这样我们就定义了一个代码页是936的字符串S。

 

显然,同一个字码在不同的代码页中很可能代表不同的字符。来看下面这个例子:

type
  TStr1 = type AnsiString(437);
  TStr2 = type AnsiString(936);

var
  s1: TStr1;
  s2: TStr2;

begin
  s1:= '══';
  SetLength(s2,2);
  Move(s1[1],s2[1],2);
  writeln(s1);
  writeln(s2);
  readln;
end

首先分别定义了英文代码页和简体中文代码页的字符串。然后把字符串“══”赋给s1(这是连续两个双横表格框线“═”,字符编码205(十六进制$CD),并非等号“=”)。接着给s2设定两个字节的长度,把s1第一个字符开始的两个字节的数据拷贝给它。注意这里不能用s2:= s1。由于字符串本质上是指针,如果简单地使用赋值语句的话会让s2直接指向s1所指向的数据区,这时两个字符串就完全一样了。

显示结果:

 

 

s2变成了一个中文字符:屯。

这是因为437代码页中的连续两个单字节字符到了936代码页中被看作了一个双字节字符,而“屯”的字码正好是$CDCD。

用过Free Pascal的人对这个一定不会陌生。

 

posted on 2021-09-16 22:18  一只小边牧  阅读(169)  评论(0编辑  收藏  举报