При использовании Printf для форматирования строки двухбайтовая в однобайтной строку:Почему параметры формата unicode не печатаются?
printf("%ls\n", L"s:\\яшертыHello"); // %ls for a wide string (%s varies meaning depending on the project's unicode settings).
Очевидно, что некоторые символы не могут быть представлены в виде ASCII-символов, так что иногда я видел поведение, где двухбайтовые символы превратиться в "?" знак. Но, похоже, это зависит от конкретных персонажей. Для приведенного выше Printf, выход:
s:\
Я надеялся, что я мог бы получить что-то вроде:
s:\??????Hello
Боюсь, я потерял пример, но я думаю, что за одну строку, когда он столкнулся с символами юникода, заменил первый на «?» а затем остался на отдыхе.
Итак, мой вопрос: что должно произойти, когда вы форматируете широкую строку в однобайтную строку. Документация здесь: http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx говорит: «Символы отображаются до первого нулевого символа». Но я этого не вижу. Является ли это ошибкой в printf, или это поведение, которое я вижу где-то где-то, где-то, где.
Благодарим за помощь.
UPDATE
Спасибо за ответы от людей, давая мне альтернативы использованию Printf. Я собираюсь перейти на альтернативу, но меня действительно интересует любопытство, почему printf не имеет надежного документированного поведения. Это похоже на то, что его разработчик вышел из своего пути, чтобы это не сработало.
Вы пробовали «% S» в качестве спецификатора формата вместо «% ls»? –
есть. Я считаю, что% S и% ls имеют то же значение, если у вашего проекта нет UNICODE. –
Чтение спецификаций формата (что я не согласен). S - для широкоформатной строки, если в настройках вашего проекта нет UNICODE, S - для однобайтовой строки, если у вас определен UNICODE. % ls для широкоформатной строки независимо от того, создаете ли вы для UNICODE или нет. % s также изменяется значение,% hs всегда для однобайтовых строк. –