Строковый вывод Unicode С#
У меня есть функция для преобразования строки в строку Unicode:
private string UnicodeString(string text)
{
return Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(text));
}
Но когда я вызываю эту функцию, результат вывода неверен. Похоже, моя функция не работает.
Console.WriteLine(UnicodeString("добры дзень"))
печатать на консоли только такие вопросы: ????? ????
Есть ли способ сказать консольу, чтобы отобразить ее правильно?
UPDATE
Похоже, проблема не в Юникоде. Я думаю, может быть, он отображает вопросительные знаки, потому что у меня нет правильной локали в системе (Windows 7)?
Есть ли способ заставить его работать без изменения языка?
Ответы
Ответ 1
Сначала измените выходную кодировку на UTF8:
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("добры дзень");
Теперь вы все равно увидите вопросительные знаки. Причина в том, что шрифт консоли по умолчанию не поддерживает кириллические буквы. Измените шрифт консоли:
![enter image description here]()
Если вам повезет, вы должны найти другой шрифт с поддержкой Unicode:
![enter image description here]()
Измените шрифт, и вы сможете увидеть текст:
![enter image description here]()
В общем случае, если вы хотите надежно отображать все символы Unicode, консоль, вероятно, не подходит для вас. Смотрите также: шрифт консоли С# (комментарии также интересны)
Ответ 2
private string UnicodeString(string text)
{
return text;
}
Строка text
уже находится в Юникоде. Все внутренние строки С# являются Unicode. Когда вы конвертируете его в ASCII, вы теряете символы. Вот почему вы получаете?????????.
Ответ 3
Просто выполните простой Console.WriteLine("добры дзень");
нет необходимости в каком-либо преобразовании.
Ответ 4
Вы можете использовать
Encoding.GetEncoding(28595);