1

Я пытаюсь понять основы практического программирования вокруг кодировок символов.Как вы обрабатываете различные кодировки символов?

Несколько вещей, чтобы рассмотреть следующие вопросы:

  • Я знаю, как читать файл, кодировка отличается, и преобразовать его в кодировке консоли.
  • Но когда я пытаюсь преобразовать буквенные строки, которые появляются в исходном коде, по какой-то причине, это не всегда работает:
    • В консоли IntelliJ в для clojure языка (его REPL или интерактивного интерпретатора), это Безразлично Не работай вообще. Я не смотрю, отличается ли эта конкретная консоль от стандартной java-консоли IntelliJ.
    • В терминале Apple иногда работает нормально, в зависимости от кодировки исходного файла.
    • В Eclipse и Netbeans он всегда работает нормально.

Там много ресурсов, чтобы узнать о Unicode и кодировки символов. Но AFAIK, не так много, чтобы изучить практические рекомендации по использованию. Некоторые другие вопросы здесь, в StackOverflow, были полезны, но ни одного из них недостаточно для того, что я пытаюсь сделать.

ОБНОВЛЕНИЕ: Я значительно упростил этот вопрос, поняв, насколько общие проблемы, с которыми я столкнулся, были. Первоначально он был специально предназначен для платформы Java с примером кода на языке clojure. Чтобы увидеть их, взгляните на первую версию этого вопроса.

ответ

2

Ваша проблема связана с тем, как ваша IDE сообщает компилятору Java интерпретировать кодировку исходного файла. (Консольный выход может быть другой проблемой. Не знаю)

Если вы запустите программу javac без аргументов, вы получите распечатку справки (ниже), которая подскажет вам, как это работает.

-encoding <encoding>  Specify character encoding used by source files 

Javac таким образом интерпретирует исходный файл, с его буквальным строки и все, превращая его в UTF8 я думаю, что в байт-код. Я уверен, что компилятор Closure имеет аналогичный вариант.

В Eclipse можно решить, какие исходные файлы кодировки находятся в разделе Общие> Рабочее пространство> Текстовое кодирование. Под моей шведской машиной Windows выбранным значением по умолчанию был CP1252. (Меня не волнует, так как я избегаю использовать символы вне ASCII именно по этой причине.)

+0

Я думаю, что это гоча. Тем не менее, я не смогу подтвердить это до понедельника. Компилятор Java читает исходные файлы с использованием системной платформы по умолчанию. Вместо этого Clojure использует UTF8. Хорошая информация об этом: http://groups.google.com/group/clojure/browse_thread/thread/1ebe3c8f342f3abe/d0497724d342e27f?lnk=raot –

+0

Вы были на месте. Я изменил кодировку своих исходных файлов и кодирующую мою среду IDE, чтобы читать их, чтобы все соответствовало. Он не разрешил мои проблемы с одной средой, но теперь я понимаю, что это проблема с выпуском консоли, которую я могу представить как ошибку для ее автора. –

+0

(А именно, похоже, что конкретная консоль поддерживает только символы ASCII или другую недокументированную кодировку.) Спасибо за вашу помощь. –

1

Помимо того, что код, который вы показываете, не является Java, я бы рекомендовал посмотреть ICU (http://site.icu-project.org/) библиотеку с открытым исходным кодом Unicode, которая доступна на Java и C++.

+0

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

1

Опция -encodingjavac сообщает компилятору, какой символ кодирует исходные файлы.

IDE обычно по умолчанию используют кодировку символов платформы, но могут быть установлены для использования указанной вами кодировки. Затем они идут еще дальше, чтобы вы могли переопределить кодировку в одном файле.

Если ваш редактор или IDE использует что-то отличное от платформы по умолчанию, то вы компилируете или редактируете файлы с помощью другого инструмента, вам нужно убедиться, что оба инструмента явно указали одну и ту же кодировку.

+0

Теперь я лучше вижу поток этого, спасибо. Это определенно поможет. Так как разработчик, я должен быть совместим с моей платформой до компиляции. Оттуда я должен быть совместим с платформой пользователя. Правильно? –

+0

Правильно; когда вы отправляете вывод на консоль (во время выполнения на компьютере пользователя), вам нужно убедиться, что вы используете кодировку консоли, которая обычно является платформой по умолчанию. – erickson

2

В записи, зная, что это хорошо, чтобы быть в состоянии решить такого рода проблемы, вот некоторые основные моменты:

  1. Проверьте кодирование каждого файла ваша программа использует. Сюда входят исходные файлы и файлы данных, будь то локально или в любой сети.
    1. Убедитесь, что считывает Source файлы знает свои соответствующие кодировки:
      • Если вы используете IDE, убедитесь, какая кодировка использует для своих следующих параметров:
        • IDE-wide кодировка
        • Project-wide кодирования
        • модуль ширина кодирования
        • И его файла конкретного кодирование.
        • Конечно, вы, вероятно, захотите стандартизировать их все с помощью уникальной кодировки.
      • Если вы используете какой-либо инструмент построения или компилятор вне IDE, проверьте его настройки.
    2. Убедитесь, что читает данные файлы знает свои соответствующие кодировки. Вы будете использовать свои возможности языка программирования для декодирования каждого файла данных с его оригинальной кодировки.
  2. Проверьте, какая кодировка необходима пользователям всех типов данных символов, которые создает ваша программа. Вы будете использовать функции языка программирования, чтобы закодировать все, как это должно быть:
    • интерфейс пользователя
    • Файлы, созданные или измененные вашей программы, в том числе:
      • сети связи
      • лог-файлы.

Следующие советы предоставлены другими людьми, может оказаться весьма полезным:

  • Не используйте кодировку платформы по умолчанию, если вы действительно, действительно уверены, что значит.
  • Предпочитайте форматы, которые несут свою собственную информацию кодирования. XML - хороший пример: все допустимые XML-файлы имеют очень четко определенную кодировку; их разбор не зависит от того, какая кодировка указана некоторыми внешними средствами.

Смотрите также следующие учебные ресурсы: Debugging Unicode Problems статьи

  • Джона Скита, с несколько более технически наклонными трюками.

и расширить эту тему, см What Issues prevent Java applications from working on multiple platforms?.

+0

Я бы добавил «предпочитают форматы, которые несут свою собственную информацию о кодировании». XML - хороший пример: все допустимые XML-файлы имеют очень четко определенную кодировку, и их анализ не зависит от того, какая кодировка указана некоторыми внешними средствами. –

+0

Thanks saua; Я отредактирую соответственно. Кроме того, я думаю, вы могли бы сами отредактировать этот ответ; любому, кто хочет это сделать, идти вперед, даже если это означает, что это ответ сообщества. (Не привык к этому, хотел убедиться, что вы не стесняетесь делать это, если это имеет смысл.) –

Смежные вопросы