Подтвердить что ты не робот

Warning C4819: Как найти символ, который должен быть сохранен в Юникоде?

В моем VS2010 я видел следующее предупреждение.

Предупреждение Предупреждение 21 C4819: Файл содержит символ, который не может быть представлен на текущей кодовой странице (936). Сохраните файл в формате Unicode, чтобы предотвратить потерю данных

c:\boost\vs2010_boost1.49\include\boost\format\alt_sstream_impl.hpp 1

На основе MSDN файл содержит символ, который должен быть сохранен в формате Unicode.

Вопрос: Я сам не касался этих файлов. Есть ли способ, чтобы я мог найти эти символы и исправить их вручную. Другими словами, я не хочу сохранять исходный файл в формате Unicode.

Спасибо

4b9b3361

Ответ 1

Вы можете использовать Notepad ++, чтобы найти все символы Unicode в файле, используя регулярное выражение:

  • Откройте файл Notepad ++.
  • Убедитесь, что вы выбрали UTF-8 в меню Encoding.
  • Откройте окно поиска (используйте CTRL-F или перейдите в меню "Поиск" и выберите "Найти..." ).
  • В режиме поиска выберите переключатель для регулярного выражения.
  • Введите [^\x00-\x7F] в поле "Найти" и нажмите кнопку "Найти далее", чтобы узнать, что вы получаете.

После того, как вы найдете символы Unicode, вы можете удалить/изменить их, изменить кодировку обратно в ANSI и сохранить файл.

Конечно, вам не нужно использовать Notepad ++. RegEx будет работать в других текстовых редакторах, например Sublime Text.

Ответ 2

Я встретил эту проблему в своем проекте и попытался изменить все символы, отличные от юникода. Но мне пришлось отказаться и найти другой способ, так как было слишком много файлов с такой проблемой (хотя все они в комментариях).

Затем я нашел быстрый способ исправить это, установив "системный язык".

Control Panel -> Clock,Language,and Region -> Region and Language -> 
Administrative -> Language for non-Unicode programs -> Change system locale -> English

Я думаю, что это может решить вашу проблему, если ваш "системный язык" не является английским.

fooobar.com/questions/402762/...

Ответ 3

в строке 176:

BOOST_ASSERT(0); // §27.4.3.2 allows undefined-behaviour here

Вы видите, что в вышеприведенной строке есть символ до 27.

Ответ 4

Вы можете использовать регулярное выражение, показанное выше в Visual Studio, чтобы найти эти символы. Вот регулярное выражение: [^\x00-\x7F]