tôi tìm ra nguyên nhân của vấn đề, và một giải pháp để làm cho nó làm việc như nó phải. Như tôi đã nghi ngờ sau khi đăng câu hỏi của tôi và đọc câu trả lời của Calum và các vấn đề với mã hóa trên Mac với một dự án khác (trong Java), nguyên nhân của sự cố là mã hóa mặc định được Mac OS X. scala
thông dịch viên, nó sẽ sử dụng mã hóa mặc định cho nền tảng được chỉ định. Trên Mac OS X, đây là Macroman, trên Windows có lẽ là CP1252. Bạn có thể kiểm tra điều này bằng cách gõ lệnh sau trong thông dịch scala:
scala> System.getProperty("file.encoding");
res3: java.lang.String = MacRoman
Theo sự giúp đỡ kiểm tra scala
, nó có thể cung cấp các đặc tính Java sử dụng tùy chọn -D. Tuy nhiên, điều này không làm việc cho tôi. Tôi đã kết thúc thiết lập các biến môi trường
JAVA_OPTS="-Dfile.encoding=UTF-8"
Sau khi chạy scala
, kết quả của lệnh trước đó sẽ cung cấp cho các kết quả sau:
scala> System.getProperty("file.encoding")
res0: java.lang.String = UTF-8
Bây giờ, in ký tự đặc biệt hoạt động như mong đợi:
print(0x20AC.toChar)
€
Vì vậy, nó không phải là một lỗi trong Scala, nhưng là một vấn đề với mã hóa mặc định. Theo tôi, nó sẽ tốt hơn nếu theo mặc định UTF-8 được sử dụng trên tất cả các nền tảng. Trong tìm kiếm của tôi cho một câu trả lời nếu điều này được xem xét, tôi đi qua một discussion trên danh sách gửi thư Scala về vấn đề này.Trong tin nhắn đầu tiên, nó được đề xuất sử dụng UTF-8 theo mặc định trên Mac OS X khi file.encoding
báo cáo Macroman, vì UTF-8 là bộ mã mặc định trên Mac OS X (giữ tôi tự hỏi tại sao file.encoding
theo mặc định được đặt thành Macroman, có thể đây là một thừa kế từ Mac OS trước khi 10 được phát hành?). Tôi không nghĩ rằng đề xuất này sẽ là một phần của Scala 2.8, kể từ Martin Odersky wrote rằng có lẽ tốt nhất là giữ mọi thứ như trong Java (tức là tôn trọng tài sản file.encoding
).
Nguồn
2009-12-30 11:57:51
Trong hệ điều hành nào bạn đang chạy trình thông dịch? Và phiên bản Scala nào? –
Được thêm vào bài đăng gốc của tôi –