|
|
1
5
用Unicode sizeof(somechar)长度(somechar) . 基本上是a的长度 一串 小于其大小的和 烧焦 S.只要你不假设 sizeof(char)=1 或 sizeof(somestring[x])=1 (既然两者都是 错误的 或者尝试交换 字节 带着 烧焦 S,那你就没什么麻烦了。任何你在做创意填料的地方 字节 走进 烧焦 S或 弦 S,那么你需要使用 弦线 . (sizeof(somestring)仍然是4,不管长度是多少,因为它本质上是一个具有编译器魔力的指针。) |
|
|
2
4
在旧的Delphi代码中,人们通常会隐式地将字符转换为字节,而不必真正考虑它。例如,在写入流时。将字符串写入流时,必须指定写入的字节数,但人们通常会传递字符计数。见 this post from Chris Bensen 另一个例子。 人们进行这种隐式转换和旧代码的另一种方式是使用“字符串”存储二进制数据。在这种情况下,它们实际上需要字节,但数据类型需要字符。2009年 a better type for this . |
|
|
3
1
我没有尝试过Delphi2009,但使用的是fpc,它也在缓慢地切换到Unicode。95%的人相信下面的所有内容都适用于Delphi2009 在fpc中(当支持unicode时),这样“length”之类的函数就会考虑到代码页。因此,它将返回字符串的长度,就像“人类”看到的那样。例如,如果有两个中文字符,它们都占用两个字节的Unicode内存,那么长度将返回2,因为字符串中有两个字符。但字符串将占用4个字节的内存。(+引用计数和前导0的内存,但这一点除外) 你不能再做的是:
因为这段代码-在两个汉字的例子-写错了两个字符。即第一个“实数”字符的两个字节。 简而言之:length()不再返回为字符串分配的字节数,而是返回字符数。(在切换到Unicode之前,这两个值彼此相等) |
|
|
4
0
除非您在字节级别进行操作,否则字符的实际大小不应该重要。 |
|
|
5
0
这是关键点,您不需要将字符串用于其他目的,但有些人会这样做。它们像数组一样使用字符串,所以它们(包括我)需要检查所有这些用法,以确保没有任何东西被破坏… |
|
|
6
0
让我们不要忘记,有时这种转换并不真正需要。比如说在记录中存储一个guid。guid只能包含十六进制字符加上-和方括号…使它们占用两倍的空间会对现有代码产生很大影响。当然,简单的解决方案是将它们更改为ansistring,并在对它们进行任何字符串操作时处理编译器警告。 |
|
|
7
0
如果您调用Windows API,这可能是一个问题。或者如果你有传统的代码 股份有限公司 或 12月 属于 STR〔0〕 改变它的长度。 |
|
|
Boltu · pandas从url返回的值是什么? 1 年前 |
|
|
trystine · 试图运行CausalNex错误UnicodeEncodeError:“charmap”编解码器无法对位置263607-263621中的字符进行编码:字符映射到<undefined> 2 年前 |
|
|
Danny Coleiro · 向文本字符串添加不可见字符 2 年前 |