Статьи

Иностранные символы для системы сборки Eclipse

 

Возникли проблемы с Eclipse и сборкой файлов с иностранными символами в имени файла? Если вы разрабатываете программное обеспечение, прочитайте и следуйте этому совету:

« :!: НЕ:!: Использовать иностранные символы в именах файлов, путях или для чего-либо еще!»

Под «иностранными символами» я подразумеваю такие вещи, как éöüàäü или просто что-либо, что находится за пределами таблицы кодовых страниц 7SC ASCII или Windows-1252 , даже если они разрешены файловой системой вашей операционной системы (например, Windows).

Или другими словами: используйте только эти символы для имен файлов или каталогов:

abcdefghijklmnopqrstuvwxyzABCDEFGEHIJKLMNOPQRSTUVWXYZ1234567890_

Следование этому совету избавит вас от многих неприятностей, потому что многие цепочки инструментов просто не справятся ни с чем другим. Возможно, вы сможете использовать пробелы в именах файлов, но для сохранения сохранности: не используйте его.

Если вы следуете этому правилу, у вас все хорошо, и вы можете перестать читать эту статью сейчас :-).

Затмение и иностранные персонажи

Вы все еще читаете? : Шок:Поэтому, если в имени вашего файла или директора есть посторонние символы, то вот как вы можете обойти по крайней мере некоторые проблемы Eclipse (и Windows!), Связанные с этим.

Сам Eclipse прекрасно справляется с иностранными персонажами. Проблема с Windows и командной строкой / DOS Shell :-(.

Неудачное строительство

Эта проблема наблюдается в Eclipse, например, в Texas Instrument Code Composer Studio v5. Наличие имени файла с помощью umlaut завершается неудачно при сборке:

CCS Build и файл с Umlaut

CCS Build и файл с Umlaut

Очевидно, что символ «Ü» исходного файла правильно обрабатывается Eclipse, но не системой сборки (make), которая работает с инструментами командной строки и на уровне DOS / cmd.

То же самое с CodeWarrior и ARM GCC: компилятор использует неправильное имя файла:

Ошибка сборки GNU gcc

Ошибка сборки GNU gcc

Проверка make-файлов показывает, что здесь все в порядке:

Сделать файл

Сделать файл

Так что что-то не так с вызовом make и компилятора. Похоже, что неправильный перевод кода символов происходит из Eclipse на уровень командной строки (командной строки DOS), и эти кодовые страницы не совпадают на моем компьютере :-(.

Кодовые страницы

Оказывается, все дело в « кодовых страницах»: как обрабатываются кодовые страницы ASCII или Windows-1252 на уровне командной строки DOS / Windows. Техническая записка Microsoft объясняет здесь кодовые страницы .

Как узнать, какая кодовая страница использует cmd.exe? Эта отличная статья показывает, что команда chcp (для изменения кодовой страницы) показывает активную кодовую страницу:

chcp в cmd.exe

chcp в cmd.exe

Eclipse Code Page

Но какая кодировка использует Eclipse? Это должна быть кодовая страница, установленная средой Java? Я нахожу настройки в меню Window> Preferences:

Eclipse Text File Encoding

Eclipse Text File Encoding

Так что он показывает для меня кодовую страницу Windows по умолчанию 1252. Можно изменить кодовую страницу Eclipse по умолчанию (для рабочей области), используя выпадающий список:

Изменение кодовой страницы по умолчанию

Изменение кодовой страницы по умолчанию

Для CodeWarrior можно использовать аргумент командной строки Eclipse для определения кодовой страницы. Это устанавливается в файле «cwide.ini» внутри папки установки eclipse. Пытаясь исправить мою проблему, я добавил эту строку и перезапустил Eclipse:

-Dfile.encoding=cp850

Я говорил «пытаюсь», потому что он исправил сообщение об ошибке, сообщенное компилятором, но сборка все равно не удалась:

Сборка по-прежнему не удается с кодовой страницей 850

Сборка по-прежнему не удается с кодовой страницей 850

Ну, должно быть что-то еще. Поэтому я решил отменить свое изменение в файле 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:

Создание с использованием Eclipse и иностранных символов в именах файлов

Создание с использованием Eclipse и иностранных символов в именах файлов

Резюме

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 :-)