首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WIDESTRING的UTF8版本

WIDESTRING的UTF8版本
EN

Stack Overflow用户
提问于 2013-07-11 05:05:45
回答 1查看 3.4K关注 0票数 3

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

那么有没有UTF8版本的WIDESTRING呢?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 05:17:16

当您将UTF8String变量赋给WideString变量时,编译器会自动插入解码字符串的指令(在Delphi2009和更高版本中)。它将UTF-8转换为UTF-16,这也是WideString所持有的。如果WideString变量包含中文字符,那是因为UTF8编码的字符串包含UTF8编码的中文字符。

如果您希望字符串wsUTF8String s中包含16位版本的字节,那么您可以通过一些类型转换绕过自动转换:

代码语言:javascript
复制
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;

如果您使用的是Delphi2009或更高版本(包括XE系列),那么您应该考虑使用UnicodeString而不是WideString。前者是原生Delphi类型,而后者更像是Windows BSTR类型的包装器。但是,在对UTF8StringAnsiString派生函数进行赋值时,这两种类型都会表现出自动转换行为,因此您使用的类型不会影响此答案。

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

代码语言:javascript
复制
ws := Utf8Decode(s);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17580870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档