gpt4 book ai didi

delphi - WIDESTRING 的 UTF8 版本

转载 作者:行者123 更新时间:2023-12-03 15:43:17 28 4
gpt4 key购买 nike

我有一个文本,需要将其存储在 widestring 变量中。但我的文本是UTF8,而widestring不支持UTF8并将其转换为一些汉字。

WIDESTRING 有 UTF8 版本吗?

我总是使用UTF8string,但在这种情况下我必须使用WideString

最佳答案

当您将 UTF8String 变量分配给 WideString 变量时,编译器会自动插入指令来解码字符串(在 Delphi 2009 及更高版本中)。它将 UTF-8 转换为 UTF-16,这就是 WideString 所保存的内容。如果您的 WideString 变量包含中文字符,那是因为您的 UTF-8 编码字符串包含 UTF-8 编码的中文字符。

如果您希望字符串 ws 保存 UTF8String s 中字节的 16 位版本,那么您可以绕过通过一些类型转换进行自动转换:

var
ws: WideString;
i: Integer;
c: AnsiChar;

SetLength(ws, Length(s));
for i := 1 to Length(s) do begin
c := s[i];
ws[i] := WideChar(Ord(c));
end;
<小时/>

如果您使用的是 Delphi 2009 或更高版本(包括 XE 系列),那么您应该考虑使用 UnicodeString 而不是 WideString。前者是 native Delphi 类型,而后者更多的是 Windows BSTR 类型的包装器。不过,在向 AnsiString 派生类(例如 UTF8String)分配时,这两种类型都会表现出自动转换行为,因此您使用的它们类型不会影响此答案。

<小时/>

在早期的 Delphi 版本中,编译器会尝试使用系统代码页(绝不是 UTF-8)来解码字符串。要使其正确解码字符串,请调用 Utf8Decode:

ws := Utf8Decode(s);

关于delphi - WIDESTRING 的 UTF8 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com