, содержащий символы Unicode
Вы забыли указать , в котором кодировка Unicode содержит строку. Существует «узкий» UTF-8, который может быть сохранен в
std::string
и напечатан с использованиемstd::cout
, а также с более широкими вариантами, что невозможно. Крайне важно знать, с какой кодировкой вы имеете дело. В оставшейся части моего ответа я предполагаю, что вы хотите использовать UTF-8.Когда я хочу напечатать эту строку с помощью:
cout << UnicodeString << endl;
EDIT:
Важно отметить, что приложение является CGI, запущенным на Ubuntu, отвечая на запросы браузера
. Проблемы здесь немного отличаются от печати на терминале.
- Вам необходимо соответствующим образом настроить заголовок ответа
Content-Type
, иначе клиент не сможет понять, как интерпретировать ответ. НапримерContent-Type: application/json; charset=utf-8
.- Вам все равно нужно убедиться, что исходная строка на самом деле является правильной кодировкой, соответствующей заголовку. См. Старый ответ ниже для обзора.
- Браузер должен поддерживать кодировку. Большинство современных браузеров долгое время поддерживали UTF-8.
Ответ на печать на терминал:
Предполагая, что
UnicodeString
действительно содержит кодированную строку UTF-8- и что терминал использует кодировку UTF-8
- , а шрифт, используемый терминалом, имеет графемы, которые вы используйте
, что выше должно работать.
выводит:
mit freundlichen Gr??en
. Тогда оказывается, что по крайней мере одно из приведенных выше предположений не выполняется.
Независимо от того, является ли 1. истинным, вы можете проверить, проверив числовое значение каждого блока кода отдельно и сравнив его с тем, что вы ожидаете от UTF-8. Если 1. неверно, то вам нужно выяснить, какая кодировка действительно использует строка, и либо преобразовать кодировку, либо настроить терминал для использования этой кодировки.
- Терминал обычно , но не обязательно, использует внутреннюю кодировку системы. Первый шаг по выяснению того, что кодирует ваш терминал / система, - это выяснить, какой терминал / система вы используете в первую очередь. Детали, вероятно, находятся в руководстве. Если на терминале нет , используйте UTF-8, тогда вам нужно преобразовать строку UFT-8 в вашу программу в кодировку символов, которую использует терминал - если только эта кодировка не имеет графем которые вы хотите распечатать. К сожалению, стандартная библиотека не обеспечивает поддержку конвертации произвольного символьного кодирования (есть некоторая поддержка для конвертации между узким и широким юникодом, но даже эта поддержка устарела). Здесь вы можете найти стандарт unicode здесь , хотя я хотел бы указать, что использование существующей конверсионной реализации может сэкономить много работы. В случае, если кодировка символа терминала не имеет необходимых графех - или если вы не хотите внедрять преобразование кодирования - это перенастройка терминала для использования UTF-8. Если терминал / система может быть настроен на использование UTF-8, в руководстве должны быть детали.
- Вы должны проверить, действительно ли сам шрифт имеет требуемые графемы, просто введя символы в терминал и посмотреть, показывают ли они, как они должны, хотя этот тест также потерпит неудачу, если в терминальной кодировке нет графем, поэтому сначала проверьте это. Руководство вашего терминала должно объяснить, как изменить шрифт, если это необходимо. Тем не менее, я ожидал бы, что
üß
будет существовать в большинстве шрифтов.
Если я правильно понимаю, вы хотите отсортировать «кратковременность (целое число) каждого игрока», поэтому, возможно, решение будет заключаться в использовании
ranking = ranking.OrderBy(x => x.puntuation).ToList();
или
ranking = ranking.OrderByDescending(x => x.puntuation).ToList();
вместо :
ranking.Sort();
Если я ошибаюсь, поправьте меня