我有一个这样的字符串:
string a1 = "{`name`:`санкт_петербург`,`shortName`:`питер`,`hideByDefault`:false}";
a1. length
显示字符串长度 68 ,这不是真的:西里尔字符符号是两倍大(因为UTF-16编码,我推测),因此实际长度为此字符串 87 。
我需要在字符串中获取Cyrillic符号的数量或以任何其他方式获得实际的字符串长度。
答案 0 :(得分:3)
来自MSDN:
.NET Framework使用UTF-16编码(由UnicodeEncoding类表示)来表示字符和字符串
所以a1.Length
是UTF-16代码单元(What's the difference between a character, a code point, a glyph and a grapheme?)。位于基本BMP(基本多语言平面)中的西里尔字符都使用单个代码单元(因此单个char
)。例如,许多表情符号使用两个代码单元(两个char
,4个字节!)......它们不在BMP中。请参阅示例https://ideone.com/ASDORp。
如果你想要大小IN BYTES,a1.Length * 2
显然是长度:-)如果你想知道UTF8(一种非常常见的编码,不是由.NET内部使用,但是网络很常用, xml,...)Encoding.UTF8.GetByteCount(a1)