Как использовать 32-битные символы Unicode в C #? - PullRequest
2 голосов
/ 23 июля 2011

Может быть, мне не нужны 32-битные строки, но мне нужно представлять 32-битные символы

http://www.fileformat.info/info/unicode/char/1f4a9/index.htm Теперь я взял шрифт символа и могу видеть символ, когда вставляю его (в URL или в любую текстовую область), поэтому я знаю, что у меня есть поддержка шрифта для него.

Но как мне поддержать его в моем приложении C # / .NET?

-edit- я добавлю что-нибудь. Когда я вставил указанный символ в мое WinNET-приложение .NET, я не вижу его правильно. Вставляя это в firefox, я вижу это правильно. Как правильно увидеть символы в моих приложениях winform?

Ответы [ 2 ]

7 голосов
/ 23 июля 2011

Я не уверен, что понимаю ваш вопрос:

  • String в .NET имеют кодировку UTF-16, и с этим ничего нельзя поделать. Если вы хотите получить версию строки в UTF-32, вам придется преобразовать ее в байтовый массив с классом UTF32Encoding .
  • Char в .NET, таким образом, имеют длину 16 бит, и вы ничего не можете с этим поделать. Символ в кодировке UTF-32 может быть представлен только байтовым массивом (с 4 элементами). Для этой цели вы можете использовать класс UTF32Encoding .
  • Каждый символ UTF-32 имеет эквивалентное представление UTF-16, и наоборот. Таким образом, в этом контексте мы могли бы говорить только о символах и их различных представлениях (кодировках), причем UTF-16 является предпочтительным представлением на платформе .NET.
3 голосов
/ 23 июля 2011

Вы не сказали, что именно вы подразумеваете под «поддержкой».Но нет ничего особенного, что вам нужно сделать, чтобы работать с символами, которые не вписываются в один 16-битный char, если вы не выполняете строковые манипуляции.Они будут просто представлены как суррогатные пары, но вам не нужно знать об этом, если вы рассматриваете string в целом.

Единственное исключение - некоторые методы манипуляции со строками не будут работать правильно.Например, "\U0001F4A9".Substring(1) вернет вторую половину суррогатной пары, которая не является допустимой строкой.

...