首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WideChar和AnsiChar有什么区别?

WideChar和AnsiChar有什么区别?
EN

Stack Overflow用户
提问于 2011-02-09 07:47:52
回答 2查看 9.7K关注 0票数 10

我正在将一些旧的(从2003年开始的) Delphi代码升级到Delphi Architect XE,我遇到了一些问题。在存在不兼容类型的情况下,我收到了许多错误。这些错误在Delphi 6中不会发生,所以我必须假设这是因为东西已经升级了。

老实说,我不知道PAnsiChar和PWideChar之间的区别是什么,但Delphi肯定知道不同之处,不让我编译。如果我知道它们的不同之处,也许我就能想出该用哪一个,或者如何解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-09 08:09:17

在Delphi2009之前,中的原生字符串类型通常是ANSI CHAR:每个字符串中的每个字符都被表示为一个8位字符。从Delphi2009Delphi开始,使用UTF-16表示法,Delphi的字符串变成了UNICODE :现在基本字符使用16位数据(2字节),您可能不需要太多地了解表示为两个连续的16位字符的Unicode代码点。

8位字符被称为"Ansi字符“。PAnsiChar是指向8位字符的指针。16位字符被称为“宽字符”。PWideChar是指向16位字符的指针。Delphi知道其中的区别,如果它不允许您混合使用这两种语言,它会做得很好!

更多信息

这里有一个关于Unicode的流行链接:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

你可以在这里找到更多关于从Delphi迁移到Unicode的信息:New White Paper: Delphi Unicode Migration for Mere Mortals

您也可以在SO中搜索"Delphi Unicode迁移“。

票数 19
EN

Stack Overflow用户

发布于 2011-02-09 08:07:35

几年前,Delphi中的默认字符类型从AnsiChar (表示UTF16字符的单字节变量)更改为WideChar (表示ANSI字符的双字节变量)。char类型现在是WideChar而不是AnsiChar的别名,string类型现在是UnicodeString (Delphi传统字符串类型的UTF-16Unicode版本)的别名,而不是AnsiStringPChar类型现在是PWideChar而不是PAnsiChar的别名。

编译器本身可以处理很多转换,但有几个问题:

  1. 如果使用字符串指针类型,如PChar,则需要确保指针指向正确的数据类型,而编译器并不总是能验证这一点。
  2. 如果要将字符串传递给变量参数,则变量类型需要完全相同。
  3. 如果你使用string作为一个方便的字节数组缓冲区来保存任意数据,而不是一个保存文本的变量,那么它就不能作为UnicodeString使用。确保将它们声明为workaround.
  4. Anyplace的RawByteString您正在处理字符串字节长度,例如,在读取或写入TStream时,请确保您的代码没有假设char为一个字节。

看看Delphi Unicode Migration for Mere Mortals,了解更多关于如何使其工作的技巧和建议。这并不像听起来那么难,但也不是微不足道的。祝好运!

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4939854

复制
相关文章

相似问题

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