Почему MSBuild использует кодовую страницу 0 вместо системной кодовой страницы и как я могу это исправить? - PullRequest
0 голосов
/ 06 ноября 2019

При попытке создать файл с помощью MSBuild выдается следующее предупреждение:

c: \ repo \ file.cpp (58): предупреждение C4819: файл содержит символ, который не может быть представлен втекущая кодовая страница (0). Сохраните файл в формате Unicode, чтобы предотвратить потерю данных [C: \ repo \ proj.vcxproj]

Перед командой построения я проверяю кодовую страницу (cmd chcp), которая сообщает мне текущий кодстраница 65001. Установка этого значения не имеет видимого эффекта в команде построения.

Точная ошибка строки (58) выглядит следующим образом:

sprintf(Buffer, "%03d\xb0 %02d' %05.2f\" %s", Splitted.Degree, Splitted.Minutes, Splitted.Seconds, Type.c_str());

Никаких специальных символов, кромеЯ могу видеть. Я переписал строку в режиме вставки, пытаясь удалить возможные символы гремлина, и проанализировал ее в блокноте ++, показывая все символы - ничего! Я также пытался сохранить файл в Unicode (powershell "get-content $file | out-file $file"), конвертировать utf-8 с и без спецификации из notepad ++ - все еще ничего! И поэтому я смотрю на эту странную вещь номер кодовой страницы. Все, что можно попробовать, приветствуется в комментариях.

Что-то, что может или не может повлиять на это, - это MSBuild (и VS), установленный и работающий в экземпляре Docker (из базовой ОС Windows). Создание такого же исходного кода в обычной среде Windows никогда не сталкивалось с этой проблемой.

Вопрос : Почему MSBuild использует кодовую страницу 0, когда системная кодовая страница является чем-то другим (например, 65001), и как это сделать? Я исправляю это?


Редактировать

Я нашел оскорбительный "персонаж", или, скорее, escape-последовательность: \xb0. Намерение состоит в том, чтобы напечатать символ степени, найденный в расширенных таблицах ASCII. Изменение b на 7 заставляет предупреждение исчезнуть. Из того, что я понимаю, это означает, что кодовая страница 0 не поддерживает расширенный диапазон ASCII.

Тем не менее, до сих пор не понимаю, почему сборка использует кодовую страницу 0 вместо системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...