Как получить десятичное значение символа юникода в C#?
как получить числовое значение символа Unicode в C#?
например, если тамильский символ அ (U+0B85) учитывая, выход должен быть!--2--> (т. е. 0x0B85)
см. также
- C++:как получить десятичное значение символа юникода в c++
- Java:как я могу получить код символа Юникода?
Multi кодовая точка персонажи
некоторые символы требуют нескольких кодовых точек. В этом примере UTF-16 каждая единица кода все еще находится в базовой многоязычной плоскости:
-
(т. е. U+0072U+0327U+030C) -
(т. е. U+0072U+0338U+0327U+0316U+0317U+0300U+0301U+0302U+0308U+0360)
более большой пункт что один "характер" может требовать больше чем 1 блока кода UTF-16, его может требовать больше чем 2 блока кода UTF-16, оно может требовать больше чем 3 блоков кода UTF-16.
большая точка заключается в том, что один "символ" может потребовать десятки кодовых точек unicode. В UTF-16 на C# это означает более 1 char. Один символ может потребовать 17 char.
мой вопрос был о преобразовании char в значение кодировки UTF-16. Даже если целая строка 17 char представляет только один "символ", я все еще хочу знать, как конвертировать каждый Блок UTF-16 в числовое значение.
например
String s = "அ";
int i = Unicode(s[0]);
здесь Unicode возвращает целочисленное значение, определенное стандартом Unicode, для первого символа входного выражения.
4 ответов
это в основном то же самое, что и Java. Если у вас есть это как char, вы можете просто преобразовать в int неявно:
char c = '\u0b85';
// Implicit conversion: char is basically a 16-bit unsigned integer
int x = c;
Console.WriteLine(x); // Prints 2949
если у вас есть это как часть строки, просто сначала получите этот единственный символ:
string text = GetText();
int x = text[2]; // Or whatever...
обратите внимание, что символы не в базовой многоязычной плоскости будут представлены в виде двух кодовых единиц UTF-16. Там is поддержка в .NET для поиска полной кодовой точки Unicode, но это не простой.
((int)'அ').ToString()
если у вас есть персонаж, как char, вы можете бросить, что на int, которая будет представлять числовое значение символа. Затем вы можете распечатать это любым способом, как и любое другое целое число.
если вы хотите шестнадцатеричный вывод вместо этого, вы можете использовать:
((int)'அ').ToString("X4")
X для шестнадцатеричных, 4 предназначен для заполнения с нуля до четырех символов.
как получить числовое значение символа Unicode в C#?
A char Не обязательно весь Unicode код. В кодированных языках UTF-16, таких как C#, вам может понадобиться 2 chars для представления одного "логического" символа. И ваша длина строки migh не то, что вы ожидаете -MSDN documnetation для строки.Свойство Длины говорит:
" свойство Length возвращает количество объектов Char в этом экземпляре, а не количество символов Юникода."
- Итак, если ваш символ Юникода закодирован только в одном
char, он уже числовой (по существу, беззнаковое 16-разрядное целое число). Вы можете захотеть cast это для некоторых целочисленных типов, но это не изменит фактического биты, которые изначально присутствовали вchar. -
если ваш символ Юникода равен 2
chars, вам нужно будет умножить один по 2^16 и добавьте его к другому, в результате чегоuintчисловое значение:char c1 = ...;
голец С2 = ...;
uint c = ((uint) c1
как получить десятичное значение символа Unicode в C#?
когда вы говорите "decimal", это обычно означает символьную строку, содержащую только символы, которые человек будет интерпретировать как десятичные цифры.
-
если вы можете представить свой символ Юникода только одним
char, вы можете преобразовать его в десятичную строку просто:char c = 'அ';
строка s = ((ushort)c).ToString (); если у вас есть 2
charsдля вашего символа Unicode преобразуйте их вuintкак описано выше, то звонитеuint.ToString.
--- редактировать ---
диакритические знаки AFAIK считаются отдельными "символами" (и отдельные кодовые точки), несмотря на визуальную визуализацию вместе с" базовым " символом. Каждая из этих кодовых точек, взятых отдельно, по-прежнему составляет не более 2 единиц кода UTF-16.
кстати, я думаю, что правильное имя для того, о чем вы говорите, - это не "характер", а "сочетание символов". Так что да, один объединение символ может иметь более 1 кодовой точки и, следовательно, более 2 кодовых единиц. Если вы хотите десятичное представление, например, комбинирование характер, вы, вероятно, можете сделать это наиболее легко через BigInteger:
string c = "\x0072\x0338\x0327\x0316\x0317\x0300\x0301\x0302\x0308\x0360";
string s = (new BigInteger(Encoding.Unicode.GetBytes(c))).ToString();
в зависимости от того, какой порядок значимости единицы кода "цифры" вы хотите, вы можете захотеть отменить c.