【发布时间】:2017-08-05 20:46:51
【问题描述】:
我有一个这样的字符串:
string a1 = "{`name`:`санкт_петербург`,`shortName`:`питер`,`hideByDefault`:false}";
a1. length 显示字符串长度为 68,这是不正确的:西里尔符号的大小是原来的两倍(我猜是因为 UTF-16 编码),因此这个字符串的实际长度87。
我需要获取字符串中西里尔符号的数量或以任何其他方式获取实际字符串长度。
【问题讨论】:
-
所有 .NET 字符串都是 UTF16。 所有 字符的长度为 2 个字节。
.Length返回字符数,而不是字节数。该字符串有 68 个字符,占用 136 个字节 -
Encoding.GetByteCount呢? -
即使使用“ASCII”字符,长度和大小也保持不变。对于
name,长度为4,使用8个字节。 -
@PanagiotisKanavos 实际上,UTF16 中的所有字符都不是 2 个字节长。有些更长。
-
@MatthewWatson 通常使用表情符号和中文。在亚洲以外遇到的最常见的情况是 2 个字节 - 除非你是塔科马机场,那里所有的公告也是中文