关于unicode的问题(100分)

  • 主题发起人 主题发起人 NeverMind
  • 开始时间 开始时间
N

NeverMind

Unregistered / Unconfirmed
GUEST, unregistred user!
定义一个字符串s:string,用于接受具体的内容,长度不定
现在想把该字符串变为unicode,然后赋予byte类型的数组,不知如何解决?
另外byte类型数组可以定义为动态的吗?谢谢!
 
StringToWideChar函数可以直接转化,不过好像是逐个字符转换。你是在做短信吗?
 
写了一个,这里的 unicode 的代码页使用系统默认的(就是中文 cp936):
uses Types;
procedure StrToUniByteArray(const S: string; var B: TByteDynArray);
var
strData: string;
nSize: Integer;
begin
nSize := Length(S);
SetLength(strData, 2 * nSize);
nSize := MultiByteToWideChar(0, 0, PChar(S), Length(S), PWideChar(strData), nSize);
SetLength(B, 2 * nSize);
if nSize > 0 then Move(PChar(strData)^, B[0], 2 * nSize);
end;
测试例子:
procedure TForm1.Button3Click(Sender: TObject);
var
S: string;
B: TByteDynArray;
begin
S := '=^0^=';
StrToUniByteArray(S, B);
Caption := IntToStr(B[1]);
end;
你在 xp/2000 中开个记事本,写入 =^0^= 然后保存成 txt(注意,选择编码是 unicode 的),然后使用 winhex 之类的打开这个 txt 可以看到处理 unicode 标识头(FFFE)就是上面代码中 B 的内容。
BTW:
如果是存储、交换信息等,utf-8 是 unicode 最好的解决方法(这个在 java 中很流行)Delphi 内置了对 utf-8 的支持:
function AnsiToUtf8(const S: string): UTF8String;
function Utf8ToAnsi(const S: UTF8String): string;
 
后退
顶部