我阅读了关于UTF-8、UTF-16和UCS-2的问题(链接),几乎所有答案都认为UCS-2已经过时,而C#使用UTF-16。
然而,我尝试在C#中创建4字节字符U+1D11E的所有尝试都失败了,因此我认为C#仅使用UTF-16的UCS-2子集。
以下是我的尝试:
C#字符串真的是UTF-16,还是实际上是UCS-2?如果它们是UTF-16,我该如何将小提琴谱号插入我的C#字符串中?
然而,我尝试在C#中创建4字节字符U+1D11E的所有尝试都失败了,因此我认为C#仅使用UTF-16的UCS-2子集。
以下是我的尝试:
string s = "\u1D11E"; // gives the 2 character string "ᴑE", because \u1D11 is ᴑ
string s = (char) 0x1D11E; // won't compile because of an overflow
string s = Encoding.Unicode.GetString(new byte[] {0xD8, 0x34, 0xDD, 0x1E}); // gives 㓘ờ
C#字符串真的是UTF-16,还是实际上是UCS-2?如果它们是UTF-16,我该如何将小提琴谱号插入我的C#字符串中?
string s = "";
。我建议您使用UTF-8编码保存您的.cs
文件。这个位于补充多语言平面中的字符将占用UTF-8中的四个八位字节。当存储在内存中时,它将占用两个UTF-16代码单元或char
值,也称为代理对。 - Jeppe Stig Nielsen