Возникли проблемы с Eclipse и сборкой файлов с иностранными символами в имени файла? Если вы разрабатываете программное обеспечение, прочитайте и следуйте этому совету:
« НЕ:!: Использовать иностранные символы в именах файлов, путях или для чего-либо еще!»
Под «иностранными символами» я подразумеваю такие вещи, как éöüàäü или просто что-либо, что находится за пределами таблицы кодовых страниц 7SC ASCII или Windows-1252 , даже если они разрешены файловой системой вашей операционной системы (например, Windows).
Или другими словами: используйте только эти символы для имен файлов или каталогов:
abcdefghijklmnopqrstuvwxyzABCDEFGEHIJKLMNOPQRSTUVWXYZ1234567890_
Следование этому совету избавит вас от многих неприятностей, потому что многие цепочки инструментов просто не справятся ни с чем другим. Возможно, вы сможете использовать пробелы в именах файлов, но для сохранения сохранности: не используйте его.
Если вы следуете этому правилу, у вас все хорошо, и вы можете перестать читать эту статью сейчас .
Затмение и иностранные персонажи
Вы все еще читаете? Поэтому, если в имени вашего файла или директора есть посторонние символы, то вот как вы можете обойти по крайней мере некоторые проблемы Eclipse (и Windows!), Связанные с этим.
Сам Eclipse прекрасно справляется с иностранными персонажами. Проблема с Windows и командной строкой / DOS Shell .
Неудачное строительство
Эта проблема наблюдается в Eclipse, например, в Texas Instrument Code Composer Studio v5. Наличие имени файла с помощью umlaut завершается неудачно при сборке:
Очевидно, что символ «Ü» исходного файла правильно обрабатывается Eclipse, но не системой сборки (make), которая работает с инструментами командной строки и на уровне DOS / cmd.
То же самое с CodeWarrior и ARM GCC: компилятор использует неправильное имя файла:
Проверка make-файлов показывает, что здесь все в порядке:
Так что что-то не так с вызовом make и компилятора. Похоже, что неправильный перевод кода символов происходит из Eclipse на уровень командной строки (командной строки DOS), и эти кодовые страницы не совпадают на моем компьютере .
Кодовые страницы
Оказывается, все дело в « кодовых страницах»: как обрабатываются кодовые страницы ASCII или Windows-1252 на уровне командной строки DOS / Windows. Техническая записка Microsoft объясняет здесь кодовые страницы .
Как узнать, какая кодовая страница использует cmd.exe? Эта отличная статья показывает, что команда chcp (для изменения кодовой страницы) показывает активную кодовую страницу:
Eclipse Code Page
Но какая кодировка использует Eclipse? Это должна быть кодовая страница, установленная средой Java? Я нахожу настройки в меню Window> Preferences:
Так что он показывает для меня кодовую страницу Windows по умолчанию 1252. Можно изменить кодовую страницу Eclipse по умолчанию (для рабочей области), используя выпадающий список:
Для CodeWarrior можно использовать аргумент командной строки Eclipse для определения кодовой страницы. Это устанавливается в файле «cwide.ini» внутри папки установки eclipse. Пытаясь исправить мою проблему, я добавил эту строку и перезапустил Eclipse:
-Dfile.encoding=cp850
Я говорил «пытаюсь», потому что он исправил сообщение об ошибке, сообщенное компилятором, но сборка все равно не удалась:
Ну, должно быть что-то еще. Поэтому я решил отменить свое изменение в файле cwide.ini и попросил обдумать и помочь. И да, кто-то пришел на помощь и объяснил, что происходит (Слюви: спасибо, спасибо, спасибо!).
Дело в том, что GNU make и даже компилятор / компоновщик внутренне вызывают свои собственные программы и командные файлы, невидимые для меня. И похоже, что эти исполняемые файлы, скорее всего, используют другую кодовую страницу, что приводит к сбою сборки. Но Sluvy нашел исправление, которое требует изменения реестра Windows .
Реестр Windows
Хитрость заключается в постоянной настройке кодовой страницы, используемой командным процессором Windows (оболочка DOS, cmd.exe), с помощью небольшой команды «автозапуск». Всякий раз, когда кто-то использует командный процессор, он выполняет мою команду, которая устанавливает кодовую страницу на ту же, которую я использую в Eclipse.
Для этого я запускаю regedit.exe и захожу в этот параметр:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
Здесь я использую контекстное меню для добавления нового многострочного значения:
Примечание: если у меня уже есть это значение, мне не нужно его добавлять, конечно
Я называю новое значение Autorun и назначаю команду chcp 1252 для изменения кодовой страницы:
Вот как это должно выглядеть:
Чтобы сделать эту команду ‘autorun’ невидимой, я могу использовать ‘@chcp 1252> nul’, см. Эту ссылку.
Здание с иностранными персонажами
Теперь пришло время попробовать это .
После изменения кодовой страницы рекомендуется перестроить все файлы make и выполнить чистую сборку (меню Project> Clean).
И действительно: мой проект теперь правильно компилируется в Eclipse / CodeWarrior:
Резюме
I learned a lot around Windows and Code Pages. And as always: it looks like the shortcomings of the past (7-bit ASCII code, etc) echoes into our world today, making things fail. Luckily there are is a way to overcome this, if necessary: it is possible to change the code page of the Windows command processor (cmd.exe) with a registry if it does not match the Eclipse code page used.
But it enforces even more my rule: “Do not use foreign characters in file names”, and simply sticking with normal characters and letters. It will avoid a lot of troubles .
Happy Code Paging