Ответ 1
Я нашел причину проблемы и решение, чтобы она работала должным образом.
Поскольку я уже подозревал, что после публикации моего вопроса и чтения ответа 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
help, можно предоставить свойства 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, так как Martin Odersky написал, что, вероятно, лучше всего держать вещи такими, какие они есть в Java (т.е. соблюдайте свойство file.encoding
).