zoukankan      html  css  js  c++  java
  • Delphi 中的 AnsiString,、Utf8String、WideString

    Delphi 中的 AnsiString,、Utf8String、WideString

    1、AnsiString  

    这是Pascal缺省的字符串类型,它由AnsiChar   字符组成,其长度没有限制,同时与null结束的字符串相兼容,它的内存和ANSI编码格式的TXT文件的内存一样,AnsiString可能是全部都是ASCII字符,也可能包含中文字符。 
     如果是在繁体中文windows系统上,可能包含繁体中文字符,如果是简体中文系统,则为GB2312编码,如果是繁体中文系统,则为BIG 5码。 

    2、WideString

    功能上类似于AnsiString,但它是由WideChar字符(UniCode字符集)组成的。引入这种类型,主要是为了支持OLE编程。而且还有一个实用的功能,就是当一个字符串是中英文字符混杂时,能够准确计数字符数,并可分别访问其中每一个中文字符或英文字符,如果一个AnsiString中含有中英文字符时,就不容易确定字符数,也无法准确访问其中的每一个字符。AnisString字符串的每一个字节都不为零,但WideString的内存字节可能为0。AnsiString内存字节中,有可能一个字节代表一个字符,也可能两个字节代表一个字符,WideString全部是两个字节代表一个字符。

    可以将一个WideString赋给一个AnsiString,也可以将一个AnsiString赋给一个WideString,在赋值过程中将发生编码转换,如果一个WideString中的Unicode字符在ANSI字符集编码范围之外,则该Unicode字符被转为? (0x3F),所以就会出现拷贝一些阿拉伯字符串到文本框中后变成一串?的情况。

    Unicode编码则是采用双字节16位来进行编号,可编65536字符,基本上包含了世界上所有的语言字符,它也就成为了全世界一种通用的编码,而且用十六进制4位表示一个编码,非常简结直观,为大多数开发者所接受。


    AnsiString(或长字符串)类型是在Delphi2.0开始引入的,因为Delphi   1.0的用户特别需要一个容易使用而且没有255个字符限制的字符串类型,而AnsiString正好能满足这些要求。 虽然AnsiString在外表上跟以前的字符串类型几乎相同,但它是动态分配的并有自动回收功能,正是因为这个功能AnsiString有时被称为生存期自管理类型。Object   Pascal能根据需要为字符串分配空间,所以不用像在C/C++中所担心的为中间结果分配缓冲区。另外,AnsiString字符串总是以null字符结束的,这使得AnsiString字符串能与Win32   API   中的字符串兼容。实际上,AnsiString类型是一个指向在堆栈中的字符串结构的指针。


    WideString类型像AnsiString一样是生存期自管理类型,它们都能动态分配、自动回收并且彼此能相互兼容,不过WideString和AnsiString的不同主要在三个方面:

    • WideString由WideChar字符组成,而不是由AnsiChar字符组成的,它们跟Unicode字符串兼容。 
    • WideString用SysAllocStrLen()API函数进行分配,它们跟OLE的BSTR字符串相兼容。 
    • WideString没有引用计数,所以将一个WideString字符串赋值给另一个WideString字符串时,就需要从内存中的一个位置复制到另一个位置。这使得WideString在速度和内存的利用上不如AnsiString有效。

    3、Utf8String

    定义同string,  但一般存放Utf8编码的字符串。

    UTF-8编码
    这是一种变长的编码方式:它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,如此一来UTF-8编码也可以是为视为一种对ASCII码的拓展。值得注意的是unicode编码中一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。
    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

    例如:用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

    创建时间:2020.12.24  更新时间:

  • 相关阅读:
    Failed at the node-sass@4.13.1 postinstall script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    页面跳转
    多行文字溢出显示省略号
    iview-select选择器组件的使用&设置默认选中的值
    iview中表单验证(遇到的问题)
    iview DatePicker type 为dateTime 时无法做表单验证!
    报错:[Vue warn]: Error in callback for watcher "value": "Value should be trueValue or falseValue."
    Jquery 数字滚动兼容小数
    validate表单验证-单独验证
    2020软件工程作业03
  • 原文地址:https://www.cnblogs.com/guorongtao/p/14184929.html
Copyright © 2011-2022 走看看