Я нашел причину проблемы и решение, чтобы она работала как надо.
Как я уже подозревал после публикации моего вопроса и прочтения ответа Calum и проблем с кодированием на Mac с другим проектом (который был в Java), причиной проблемы является кодировка по умолчанию, используемая Mac OS X. Когда вы запускаете scala
интерпретатор, он будет использовать кодировку по умолчанию для указанной платформы. В Mac OS X это Macroman, в Windows это, вероятно, CP1252. Вы можете проверить это, введя следующую команду в интерпретаторе scala:
scala> System.getProperty("file.encoding");
res3: java.lang.String = MacRoman
Согласно справочному тесту scala
, можно предоставить свойства Java с помощью опции -D. Тем не менее, это не работает для меня. Я закончил настройку переменной среды
JAVA_OPTS="-Dfile.encoding=UTF-8"
После выполнения scala
результат предыдущей команды даст следующий результат:
scala> System.getProperty("file.encoding")
res0: java.lang.String = UTF-8
Теперь печать специальных символов работает как положено:
print(0x20AC.toChar)
€
Итак, это не ошибка в Scala, а проблема с кодировками по умолчанию. На мой взгляд, было бы лучше, если бы по умолчанию UTF-8 использовался на всех платформах. В моем поиске ответа, если это учитывается, я наткнулся на обсуждение в списке рассылки Scala по этому вопросу. В первом сообщении предлагается использовать UTF-8 по умолчанию в Mac OS X, когда file.encoding
сообщает Macroman, поскольку UTF-8 является кодировкой по умолчанию в Mac OS X (меня интересует, почему по умолчанию установлен file.encoding
Macroman, возможно, это наследство от Mac OS до выпуска 10?). Я не думаю, что это предложение будет частью Scala 2.8, так как Мартин Одерский написал , что, вероятно, лучше всего сохранять вещи такими, как они есть в Java (то есть соблюдать свойство file.encoding
).