Настройка кодировки символов исходного файла для Monu's xbuild - PullRequest
1 голос
/ 29 июня 2011

Я генерирую исходный код C #, который создается как VS2010, так и Monu's xbuild (2.10.2.0). Обычно это работает очень хорошо, у меня до сих пор была только одна проблема совместимости, и в этом случае я использовал «функцию», которая явно указана как неопределенное поведение (так что я виноват).

Теперь я столкнулся с проблемой, когда у меня есть специальные символы в строковом литерале в исходном коде C #. Я генерирую исходные файлы в UTF-8, символ, с которым я тестирую, это Немецкий диез s: 0xC39F . Это записывается в файл в латинице 1 кодом, где он заканчивается как 0xDF, когда исполняемый файл собран с VS (это тот, который я хочу) и как 0xC33F, когда собран с xbuild.

Насколько я вижу, не имеет значения, запускаю ли я исполняемый файл с .NET или с Mono CLR.

В настоящее время я подозреваю, что xbuild не читает исходный код как UTF-8, поэтому скомпилированный код уже содержит неправильный символ в строковом литерале. Есть ли способ явно сказать это? Я ничего не смог найти в xbuild /?, а документация xbuild не совсем исчерпывающая. Если я просто пропустил нужную страницу, где это задокументировано, конечно, достаточно просто ссылки.

Все эксперименты были выполнены на Win7 x64.

РЕДАКТИРОВАТЬ 1: Чтобы уточнить, я использовал шестнадцатеричный редактор, чтобы подтвердить, что символ в файле исходного кода действительно 0xC39F, символ, записанный при компиляции с VS2010, - 0xDF и символ, написанный при компиляции с xbuild 0xC33F.

1 Ответ

2 голосов
/ 30 июня 2011

Вам нужно изменить файл (ы) .csproj и добавить элемент в раздел .

Вы должны иметь возможность использовать Visual Studio или MonoDevelop, чтобы сделать это дляВы также.

В MonoDevelop, если вы щелкнете правой кнопкой мыши по проекту и выберете пункт меню «Опции», вы можете перейти в раздел «Сборка / Общие» и появится «Кодовая страница компилятора»."поле, которое вы можете использовать для выбора" UTF-8 ".

FWIW, вот что выводит MD, когда я выбираю UTF-8:

65001

Так что вы можете просто скопировать / вставить это в

...