Delphi7中 string, AnsiString, Utf8String,WideString的区别分析

Delphi语言的字符串处理 Delphi语言作为一种高效的编程语言,因其强大的可视化界面和丰富的组件库而广泛应用于软件开发中。在应用程序开发过程中,字符串处理是非常重要的一个环节。字符串不仅是数据存储的基本形式,也是用户交互的主要表现形式。本文将深入探讨Delphi语言中的字符串处理,包括字符串的基本操作、常用函数、字符串类型的转换、正则表达式的应用以及性能优化等多个方面。 阅读详情

Windows系统上的 Notepad.exe 打开文件后,点击“文件”菜单中的“另存为”命令,会跳出一个对话框,在最底部有一个“编码”的下拉条。
里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。
1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。
2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。
3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。
4)UTF-8编码,也就是上一节谈到的编码方法。
 

缺省的编译选项下,编译器认为String就是AnsiString字符串(可以使用$H编译开关来进行修改)。

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

 

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保存到文件。
 

附【Unicode 码表】

0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
0080-00FF:C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement) 
0100-017F:拉丁文扩展-A (Latin Extended-A) 
0180-024F:拉丁文扩展-B (Latin Extended-B) 
0250-02AF:国际音标扩展 (IPA Extensions) 
02B0-02FF:空白修饰字母 (Spacing Modifiers) 
0300-036F:结合用读音符号 (Combining Diacritics Marks) 
0370-03FF:希腊文及科普特文 (Greek and Coptic) 
0400-04FF:西里尔字母 (Cyrillic) 
0500-052F:西里尔字母补充 (Cyrillic Supplement) 
0530-058F:亚美尼亚语 (Armenian) 
0590-05FF:希伯来文 (Hebrew) 
0600-06FF:阿拉伯文 (Arabic) 
0700-074F:叙利亚文 (Syriac) 
0750-077F:阿拉伯文补充 (Arabic Supplement) 
0780-07BF:马尔代夫语 (Thaana) 
07C0-077F:西非書面語言 (N'Ko) 
0800-085F:阿维斯塔语及巴列维语 (Avestan and Pahlavi) 
0860-087F:Mandaic 
0880-08AF:撒马利亚语 (Samaritan) 
0900-097F:天城文书 (Devanagari) 
0980-09FF:孟加拉语 (Bengali) 
0A00-0A7F:锡克教文 (Gurmukhi) 
0A80-0AFF:古吉拉特文 (Gujarati) 
0B00-0B7F:奥里亚文 (Oriya) 
0B80-0BFF:泰米尔文 (Tamil) 
0C00-0C7F:泰卢固文 (Telugu) 
0C80-0CFF:卡纳达文 (Kannada) 
0D00-0D7F:德拉维族语 (Malayalam) 
0D80-0DFF:僧伽罗语 (Sinhala) 
0E00-0E7F:泰文 (Thai) 
0E80-0EFF:老挝文 (Lao) 
0F00-0FFF:藏文 (Tibetan) 
1000-109F:缅甸语 (Myanmar) 
10A0-10FF:格鲁吉亚语 (Georgian) 
1100-11FF:朝鲜文 (Hangul Jamo) 
1200-137F:埃塞俄比亚语 (Ethiopic) 
1380-139F:埃塞俄比亚语补充 (Ethiopic Supplement) 
13A0-13FF:切罗基语 (Cherokee) 
1400-167F:统一加拿大土著语音节 (Unified Canadian Aboriginal Syllabics) 
1680-169F:欧甘字母 (Ogham) 
16A0-16FF:如尼文 (Runic) 
1700-171F:塔加拉语 (Tagalog) 
1720-173F:Hanunóo 
1740-175F:Buhid 
1760-177F:Tagbanwa 
1780-17FF:高棉语 (Khmer) 
1800-18AF:蒙古文 (Mongolian) 
18B0-18FF:Cham 
1900-194F:Limbu 
1950-197F:德宏泰语 (Tai Le) 
1980-19DF:新傣仂语 (New Tai Lue) 
19E0-19FF:高棉语记号 (Kmer Symbols) 
1A00-1A1F:Buginese 
1A20-1A5F:Batak 
1A80-1AEF:Lanna 
1B00-1B7F:巴厘语 (Balinese) 
1B80-1BB0:巽他语 (Sundanese) 
1BC0-1BFF:Pahawh Hmong 
1C00-1C4F:雷布查语(Lepcha) 
1C50-1C7F:Ol Chiki 
1C80-1CDF:曼尼普尔语 (Meithei/Manipuri) 
1D00-1D7F:语音学扩展 (Phonetic Extensions) 
1D80-1DBF:语音学扩展补充 (Phonetic Extensions Supplement) 
1DC0-1DFF:结合用读音符号补充 (Combining Diacritics Marks Supplement) 
1E00-1EFF:拉丁文扩充附加 (Latin Extended Additional) 
1F00-1FFF:希腊语扩充 (Greek Extended) 
2000-206F:常用标点 (General Punctuation) 
2070-209F:上标及下标 (Superscripts and Subscripts) 
20A0-20CF:货币符号 (Currency Symbols) 
20D0-20FF:组合用记号 (Combining Diacritics Marks for Symbols) 
2100-214F:字母式符号 (Letterlike Symbols) 
2150-218F:数字形式 (Number Form) 
2190-21FF:箭头 (Arrows) 
2200-22FF:数学运算符 (Mathematical Operator) 
2300-23FF:杂项工业符号 (Miscellaneous Technical) 
2400-243F:控制图片 (Control Pictures) 
2440-245F:光学识别符 (Optical Character Recognition) 
2460-24FF:封闭式字母数字 (Enclosed Alphanumerics) 
2500-257F:制表符 (Box Drawing) 
2580-259F:方块元素 (Block Element) 
25A0-25FF:几何图形 (Geometric Shapes) 
2600-26FF:杂项符号 (Miscellaneous Symbols) 
2700-27BF:印刷符号 (Dingbats) 
27C0-27EF:杂项数学符号-A (Miscellaneous Mathematical Symbols-A) 
27F0-27FF:追加箭头-A (Supplemental Arrows-A) 
2800-28FF:盲文点字模型 (Braille Patterns) 
2900-297F:追加箭头-B (Supplemental Arrows-B) 
2980-29FF:杂项数学符号-B (Miscellaneous Mathematical Symbols-B) 
2A00-2AFF:追加数学运算符 (Supplemental Mathematical Operator) 
2B00-2BFF:杂项符号和箭头 (Miscellaneous Symbols and Arrows) 
2C00-2C5F:格拉哥里字母 (Glagolitic) 
2C60-2C7F:拉丁文扩展-C (Latin Extended-C) 
2C80-2CFF:古埃及语 (Coptic) 
2D00-2D2F:格鲁吉亚语补充 (Georgian Supplement) 
2D30-2D7F:提非纳文 (Tifinagh) 
2D80-2DDF:埃塞俄比亚语扩展 (Ethiopic Extended) 
2E00-2E7F:追加标点 (Supplemental Punctuation) 
2E80-2EFF:CJK 部首补充 (CJK Radicals Supplement) 
2F00-2FDF:康熙字典部首 (Kangxi Radicals) 
2FF0-2FFF:表意文字描述符 (Ideographic Description Characters) 
3000-303F:CJK 符号和标点 (CJK Symbols and Punctuation) 
3040-309F:日文平假名 (Hiragana) 
30A0-30FF:日文片假名 (Katakana) 
3100-312F:注音字母 (Bopomofo) 
3130-318F:朝鲜文兼容字母 (Hangul Compatibility Jamo) 
3190-319F:象形字注释标志 (Kanbun) 
31A0-31BF:注音字母扩展 (Bopomofo Extended) 
31C0-31EF:CJK 笔画 (CJK Strokes) 
31F0-31FF:日文片假名语音扩展 (Katakana Phonetic Extensions) 
3200-32FF:封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months) 
3300-33FF:CJK 兼容 (CJK Compatibility) 
3400-4DBF:CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A) 
4DC0-4DFF:易经六十四卦符号 (Yijing Hexagrams Symbols) 
4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs) 
A000-A48F:彝文音节 (Yi Syllables) 
A490-A4CF:彝文字根 (Yi Radicals) 
A500-A61F:Vai 
A660-A6FF:统一加拿大土著语音节补充 (Unified Canadian Aboriginal Syllabics Supplement) 
A700-A71F:声调修饰字母 (Modifier Tone Letters) 
A720-A7FF:拉丁文扩展-D (Latin Extended-D) 
A800-A82F:Syloti Nagri 
A840-A87F:八思巴字 (Phags-pa) 
A880-A8DF:Saurashtra 
A900-A97F:爪哇语 (Javanese) 
A980-A9DF:Chakma 
AA00-AA3F:Varang Kshiti 
AA40-AA6F:Sorang Sompeng 
AA80-AADF:Newari 
AB00-AB5F:越南傣语 (Vi?t Thái) 
AB80-ABA0:Kayah Li 
AC00-D7AF:朝鲜文音节 (Hangul Syllables) 
D800-DBFF:High-half zone of UTF-16 
DC00-DFFF:Low-half zone of UTF-16 
E000-F8FF:自行使用區域 (Private Use Zone) 
F900-FAFF:CJK 兼容象形文字 (CJK Compatibility Ideographs) 
FB00-FB4F:字母表達形式 (Alphabetic Presentation Form) 
FB50-FDFF:阿拉伯表達形式A (Arabic Presentation Form-A) 
FE00-FE0F:变量选择符 (Variation Selector) 
FE10-FE1F:竖排形式 (Vertical Forms) 
FE20-FE2F:组合用半符号 (Combining Half Marks) 
FE30-FE4F:CJK 兼容形式 (CJK Compatibility Forms) 
FE50-FE6F:小型变体形式 (Small Form Variants) 
FE70-FEFF:阿拉伯表達形式B (Arabic Presentation Form-B) 
FF00-FFEF:半型及全型形式 (Halfwidth and Fullwidth Form) 
FFF0-FFFF:特殊 (Specials)

 

 

 

1.字符编码的发展

第一阶段:ASCII阶段,(American Standard Code for Information Interchange, “美国信息交换标准码),计算机当时只支持英语,字符在计算机中都是以0和1的方式存储的。象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,就必须要有一定的规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪个二进制数来表示。(来自百度百科),ASCII码规定每个字符例如“a”使用1个字节来表示,也就是8为的二进制组合,那么就有00000000-11111111一共256种组合,也就是可以表示256个不同的字符。

其中0-31:是控制字符或通讯专用字符(不可以显示的字符,其余为可显示字符),如控制符:LF(换行)、CR(回车)等。

32-126:是字符,其中32是空格。

48-57为0-9的阿拉伯数字。

65-90为26个大写英文字母。

97-122为26个小写英文字母。

其余的是一些标点符号,运算符号等。

ASSCII共计有128个,从0到127,也就是从00000000-01111111,最高位都是0。

 

第二阶段:ANSI编码(本地化)阶段,ASCII只能表示英文字符,那么其他字符怎么表示呢?汉语是这样解决的,用两个ASCII表示一个汉字,而且不用前面的128个。比如汉字“中”在中文操作系统中使用[0xD6,0xD0] 这两个字节存储,这样每个汉字也都有了自己的编码,汉字编码解决了,这就是中国的GB2312编码标准,但是这是中国汉字的编码,那么其他国家呢?其他的国家的计算机操作系统中可能把[0xD6,0xD0] 这两个字节存储成他们的文字,而不是“中”,不同的国家和地区制定了不同的标准,这些使用 2 个字节来代表一个字符的各种文字延伸编码方式,称为 ANSI 编码。

(1)GB2312-80汉字编码

GB2312国标字符集构成一个二维平面,它分成94行、94列,行号称为区号,列号称为位号。每一个汉字或符号在码表中都有各自的位置,字符的位置用它所在的区号(行号)及位号(列号)来表示。每个汉字的区号和位号分别用1个字节来表示,

如:“大”字的区号20,位号83,区位码是20,83

用2个字节表示为:00010100 01010011

问题:信息通信中,汉字的区位码与通信使用的控制码(00H~1FH)发生冲突。

解决方案:为避免汉字区位码与通信控制码冲突,ISO2022规定,每个汉字区号和位号必须分别加上32(即20H),

即区位码加上2020H。

经过这样处理得到的代码称为汉字的“国标交换码”(简称交换码)。因此,“大”字的国际交换码是:

区位码(00010100 01010011)+ 2020H=国际交换码(00110100 01110011)

 

机内码:

问题:文本中汉字与西文字符经常混用,汉字信息如不予以特别的标识,它与单字节的标准ASCII码就会混淆不清。

解决方法:把一个汉字看作两个扩展ASCII码,使表示GB2312汉字的两个字节的最高位(b7)加“1”,(即27=128=80H)。这种高位为l的双字节(16位)汉字编码就称为GB2312汉字的“机内码”,又称内码。
“大”的国际交换码:(00110100 01110011),
内码是:10110100 11110011(B4F3)

 

第三阶段:UNICODE(国际化),为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

Unicode目前普遍采用的是UCS-2它用两个字节来编码一个字符一般用十六进制来表示UCS-2最多能编码65536个字符

 

环境:win7中文旗舰版 + VS2010 + 当前代码页为GBK(GBK兼容GB2312,所以上面的例子,可以再当前环境下验证)

 

string str1 = "123大";//GBK编码[31H,32H,33H,b4H,f3H]
wstring str2 = L"123大";//UCS-2编码[0031H,0032H,0033H,5927H]
string str3;
int nlength = WideCharToMultiByte(CP_UTF8, 0, str2.c_str(), -1, NULL, 0, NULL, NULL);
str3.resize(nlength, '\0');
WideCharToMultiByte(CP_UTF8, 0, str2.c_str(), -1, &str3[0], nlength, NULL, NULL);//Unicode to UTF-8
//str2 UTF-8编码[31H,32H,33H,E5H,a4H,a7H]


1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

例如:

“大”字,UCS-2编码为[5927H],即[0101 1001 0010 0111]

对于UTF-8编码来说,[5927H]在0800H~FFFFH之间,应该使用[1110 xxxx 10yy yyyy 10zz zzzz],将[0101 1001 0010 0111]以此填入xxxx yy yyyy zz zzzz部分,得

[1110 0101 1010 0100 1010 0111],即 [e5H a4H a7H]

Delphi用DOSCommand执行外部命令:从同步到异步的完整指南 在图形界面程序中执行外部命令行工具是常见需求,例如调用Git、FFmpeg或压缩工具。其背后涉及进程创建、标准输入输出重定向、管道读取等底层机制,若直接用ShellExecute或CreateProcess封装,往往会遇到死锁、界面卡死和编码乱码等棘手问题。一个成熟的解决方案是通过专用组件来管理进程生命周期和输出流。Delphi作为经典桌面开发工具,其生态中的DOSCommand组件正是为此设计。它封装了CreateProcess、管道重定向和异步线程读取,通过事件回调将实时输出传递给界面层,从而简化了同步 阅读详情

相关推荐

UTF8与ansi string转换处理(DELPHI7开发)

delphi 开发的UTF8 ansistring转换动态库。 通过DELPHI与C++测试。 前面上传的资源未经过仔细验证,有问题,不好意思,重新修正上传

Delphi String和wideString的区别

【Ansistring】为Delphi的缺省字符串类型,是单字节字符串; 如:str1:string;  //编译器认为str1的类型是Ansistring类型 【wideString】由wideChar字符组成,功能类似于AnsiString,是双字节字符串; 另: AnsiChar:标准的1字节ANSI字符; WideChar:2字节的Unicode字符; Char:等同于

地狱鸟的专栏 2093

Delphi中UTF-8,Unicode格式转换

delphi7调用delphi2009生成的dll文件会出现乱码问题。是unicode的原因 终于找到了UTF-8、Unicode格式转换函数

Delphi中String与WideString的区别

AnsiString delphi缺省字符串类型 WideString 功能上类似于AnsiString,但它是由WideChar字符组成的,也就是。 Str1:string;// 编译器认为S的类型是AnsiString 当然,能用编译开关$ H来将AnsiString 类型定义为ShortString,当$ H编译开关的值为负时,S变量 是ShortString类型;当$ H编译开关的值为正时(缺省情况),字符串变量是AnsiString 类型。 另: AnsiChar:标准的

husion01的专栏 1万+

Delphi中String与WideString的区别2.docx

Delphi中String与WideString的区别2.docx

AnsiString和UnicodeString的区别

Delphi 2009是第一个完整支持Unicode的Delphi版本。虽然来得太迟,但确是巨大的进步。 原来的Delphi中有两种字符串:AnsiString和WideString。默认的string即AnsiString。而在Delphi 2009中, 新增加了一种UnicodeString。为什么不沿用之前的WideString呢?WideString其实是为了方便使用COM而产生的

gzlxclxc的专栏 4205

Photoshop免费获取指南:官方试用与开源替代方案详解

图像处理软件是数字内容创作的核心工具,其工作原理基于像素编辑、图层叠加与算法滤镜。这类软件的技术价值在于为设计师、摄影师和内容创作者提供了强大的视觉表达能力,广泛应用于平面设计、UI/UX、摄影后期及社交媒体内容制作等场景。在众多工具中,Adobe Photoshop以其全面的功能和行业标准地位备受关注。对于希望免费体验或使用的用户,存在合法且安全的途径。其中,Adobe官方提供的7天免费试用版允许用户在安全环境下体验完整功能,而开源替代方案如GIMP则提供了长期免费的强大图像编辑能力。理解这些合法获取方式

cigang4063的博客 526

Delphi 7升级到XE2的字符串问题

本文转自 http://blog.sina.com.cn/s/blog_53decb41010171je.html     原来的Delphi中有两种字符串:AnsiString和WideString。默认的string即AnsiString。而在Delphi 2009中,新增加了一种UnicodeString。为什么不沿用之前的WideString呢?WideString其实是为了方便

hksoobe的专栏 1324

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1966

OceanBase数据迁移(OMS)深度解析:异构数据库迁移方案、核心原理与实战优化指南

OceanBase迁移服务(OMS)提供异构数据库间全量+增量数据迁移与实时同步能力,核心价值在于保障业务连续性、数据一致性和异构兼容性。其分层架构包含服务接入层、流程编排层和组件链路层,支持Oracle/MySQL/DB2等与OceanBase的数据交互。关键技术包括DBCat引擎处理结构转换、并行分片实现全量迁移、以及日志解析保障增量同步。OMS通过类型映射、批量提交和断点续传等优化手段,确保迁移过程高效可靠,典型应用于去O迁移、数据库升级等场景。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 849

Delphi 的字符及字符串string、AnsiString、WideString、String[n]、ShortString

//最常用的 string var str: string; {定义} begin str := '万一'; {赋值} ShowMessage(IntToStr(Length(str))); {长度是: 4} end; //长字符串 AnsiString; 在当前版本(2007)中的默认状态下, String 就是 AnsiString var str: AnsiString; begin str := '万一'; ShowMessage(IntToStr(Length(.

zp19860529的博客 1833

家人们,谁懂啊,dify又报错了:[models] Bad Request Error, 500 Server Error:Internal Server Error for url: http://

本来今天下班,坐在地铁上,一身劳累。一起上班的小兄弟儿,突然甩来一张截图:老大!dify又报错了。没办法,一到家就打开电脑,开始排查。

xiezhipu的博客 883

Delphi与字符编码(实战篇)

Delphi与字符编码(实战篇) Posted on 2008-01-05 22:39 保权 阅读(136) 评论(0)  编辑  收藏 所属分类: 字符编码 、Delphi <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elemen

jiljil的专栏 3590

uniapp - 详细解决 H5 网页报错 Uncaught Error: Async component timed out after ? ms.(移动端h5页面白屏或加载缓慢失败,超时报错处理)

uni-app,vue3,网页,h5,移动端,手机H5页面,浏览器,报错,uniapp报错,Asynccomponenttimedoutafter,如何解决这个问题,vue3Asynccomponenttimedoutafter,异步组件超时了怎么办,async,详细解决方案,AsyncComponents异步组件,导致页面打不开了,白屏什么也不显示,网页载入非常慢卡顿,vue3网站报错,超时,nuxt3,详细解决方案,浏览器控制台报错,爆红并且页面卡住了,依旧报错,找不到异步组件的报错

🏆 前端领域优质创作者 3778

RIP协议

一、 Rip简介 早期在unix系统上使用,1988年才发布第一个rip协议标准“RFC1058”,是一种距离矢量(Distance-vector)协议。 1. 特点: 只关心跳数,下一跳,不关心整网拓扑。 基于传闻的路由协议。 2. 场景: 适用于规模小且可靠性要求低的网络环境,部署简单,因为其跳数限制,不适用于大型网络。 3. 工作原理: - 开启RIP发送RIP请求 - 接受请求发出响应...

ledrsnet的博客 8608

Delphi String 与wideString 的完美转换

Delphi String 与wideString 的完美转换 一般来说,String与widestring 的转换是系统自动进行的,但是,考虑如下字符串 s:=#2+#3+#0+#10+#0+#1+#164+#59;,显然S的长度为8,然后执行如下代码 var S,S2:string; I: Integer; WS:widestring; begin s:=#2+#3+#0+#10

luguocai的博客 8658

二、Creo模型的功能函数 例如:模型(元件)的干涉........

【代码】模型(元件)的干涉。

行为艺术家Zzz的博客 617

Delphi 中String、ANSIString、TBytes之间的转换

buffer是tbytes型,temp是string型 temp := string(pointer(buffer)); setlength(temp,length(buffer)); CopyMemory(Pointer(temp), @buffer[0], Length(buffer)); d2007以后 一、string转为ansistring 1、直接赋值 (有警告) 2、ansistring()类型强制转换。(无警告) 二、ansistring 转为string 1、直接赋值 (有警.

重楼的博客 2919

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Delphi中WideString与String的区别

导读:   Delphi中WideString与String的区别   2006-05-21 20:24:00 / 个人分类:编程技巧   有谁能说出这两个类型的区别吗?后来大脚兄解释说:WideString 以两位方式处理字符串,而String 则一位一位处理。不过,这意味着什么呢?   如果你只开发英文版的软件,那无所谓,这两个类型没有任何区别。但是如果使用了中文,那就要严格区分这两个

slxx0712的专栏 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Delphi 的字符及字符串[2] - Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideChar

//单字符 Char、AnsiChar (在目前版本(2007)中, 它们是一回事, 只有 1 字节大小) var c: Char; {Char 类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF} begin {用十进制方式赋值:} c := #65; ShowMessage(c); {A} {用十六进制方式赋值:} c := #$41; ShowMessage(c); {A} {用 Chr 函数代替 # 符号} c := Chr(65.

zp19860529的博客 1643

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WideString 还是 AnsiString ?谈谈字符编码

本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/30/1921386.html

hksoobe的专栏 1339

汉字与区位码(2) - 分析

在没有 Uncode 的时代, 用 256 个 ACSII 只是方便了英文, 其他文字怎么办? 那时是各自为政的, 譬如中文就有: GB2312-80(国内简体)、Big5(台湾繁体)、HKSCS(香港繁体), 但它们互不兼容. GB2312(1980年) 后来升级到 GBK(1995年), 现在电脑上使用的是 GB18030(2000年), 这个系列是向后兼容的. 区位码的...

weixin_34241036的博客 265

Delphi Xe的字符及字符串[1] - string、AnsiString、WideString、String[n]、ShortString

最常用的 string,以前版本(2007)中的默认状态下, String 就是 AnsiString,Xe版本String就是WideString。注意:DelphiXE中使用UniCodeString下标引用得到的字符的值,而使用AnsiString下标引用得到的却是字节的值。 AnsiString实质上是一个指针类型,与普通的指针不同,此类型的指针专用于指向字符串。利用标准函数SizeOf()可知此类型变量在内存中占用4个字节。所以AnsiString最小值为4byte,而非0byte,也就是说,一

turbocc 因程序而激情 3002

delphi Ansistring wideString shortstring

<br />在Delphi中字符串类型为String,有ShortString, AnsiString, WideString三种<br /><br />类型             最大长度     占用内存<br />ShortString      255         2-256         向后兼容<br />AnsiString       大约2^31     4字节-2G       8位(ANSI)字符<br />WideString       大约2^30     4字节-2G 

RegeditNo1的专栏 3208
上一篇: 解决delphi7在win10上安装后无法正常使用的问题
下一篇: delphi7 向程序发送命令时出现问题
cbntrt
博客等级 码龄20年 4粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值