加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi Xe2中使用新类型的字符串?

发布时间:2020-12-15 09:24:43 所属栏目:大数据 来源:网络整理
导读:请注意,sarnold对此问题进行了大量编辑;原本的 整个问题作为评论保留在问题中.如果我做了 不明确的事情,也许原来的帖子会有所帮助. (我走了 它作为评论,所以未来的编辑不需要总是参考 问题编辑历史.) 我正在使用Delphi Xe2,需要帮助了解如何使用ANSI 字符串,
请注意,sarnold对此问题进行了大量编辑;原本的
整个问题作为评论保留在问题中.如果我做了
不明确的事情,也许原来的帖子会有所帮助. (我走了
它作为评论,所以未来的编辑不需要总是参考
问题编辑历史.)

我正在使用Delphi Xe2,需要帮助了解如何使用ANSI
字符串,Unicode字符串和宽字符字符串,正确,
特别是在编写用于其他语言的DLL时(例如
如VB,C或C#).

我需要使用Delphi Xe2编写DLL来执行简单的字符串操作
在Unicode字符串上.这个DLL需要使用一个是SimpleShareMem或
ShareMem或没有内存管理器.这个DLL需要可以从外部调用
VB,C和C#等语言.

默认情况下,字符串现在应该是Unicode字符串.我们应该使用吗?
Embarcadero使用这些字符串?

字符串是:(a)不支持Unicode的单字节字符
或(b)宽字符串,其中每个字符需要两个字节. (这些
支持Unicode,但它们不是UTF-8字符串.)

有两种指针类型:PAnsiChar和PWideChar(那里
没有PUnicodeChar指针可用). PChar是别名
PWideChar – 这意味着我们总是需要分配2 *长度
这些字符串的内存量? (同样,我们需要划分
内存由2来获取这些字符串的长度?)

对于字符串常量,我们是否需要在字符串中标记字符串的类型
源代码?例如.:

Const MyCo = 'test';

要么

Const MyCo = WideString('test');

当我们在字符串变量之间执行赋值时怎么样?

s := st;

这应该重写:

s := WideString(st);

我们应该在字符串中包含Unicode字节顺序标记吗?应该怎样
我们在字符串中包含BOM?

我们应该如何使用不同Windows代码页中的ANSI字符串?如果
如果我们重新编码,我们会收到代码页为1200的ANSI字符串
字符串或按原样使用它?

我们应该如何使用TEncoding类在Unicode,UTF-8之间进行转换,
WideString和AnsiString类?

使用宽字符串或Unicode是否存在严重的性能损失
字符串?

我们应该编写我们的接口以要求只使用WideString
使用通用内存管理器时的变体?

我们是否应该将接口编写为需要PChar的长度参数,
PAnsiChar和PWideChar参数类型?

如何编写我们的接口来确定文件是否以Unicode存储,
UTF-8,ANSI还是宽字符?我们该如何确定要采用的格式
在将文件写回来时使用?

我们应该只使用程序吗?或者功能也可以吗?

谢谢,新年快乐.

解决方法

我得到的印象是Gu正在从Delphi 7转向支持Unicode的版本(D2009),并正在寻找有关如何处理新字符串的建议.

Cary Jensen的白皮书Delphi Unicode Migration for Mere Mortals解决了问题中提出的大部分问题.

我通常会把它放在评论中,但是评论列表已经很久了,我觉得在答案中更容易找到链接(这可能有助于更多人而不仅仅是顾).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读