如何获取字符串的字节长度?

时间:2017-03-15 08:12:55

标签: c# string encoding

我有一个这样的字符串:

string a1 = "{`name`:`санкт_петербург`,`shortName`:`питер`,`hideByDefault`:false}";

a1. length显示字符串长度 68 ,这不是真的:西里尔字符符号是两倍大(因为UTF-16编码,我推测),因此实际长度为此字符串 87

我需要在字符串中获取Cyrillic符号的数量或以任何其他方式获得实际的字符串长度。

1 个答案:

答案 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)

的字节数