2009-12-23 36 views
5

Tôi đã viết một tập lệnh Ruby đang đọc một tệp (File.read()) có chứa các ký tự unicode và nó hoạt động tốt từ dòng lệnh.Chuỗi Unicode trong Ruby 1.9

Tuy nhiên, khi tôi cố gắng đặt nó vào Quy trình làm việc tự động (Mac OS X), tôi gặp lỗi này;

2009-12-23 17:55:15 -0500: /Users/jeffreyaylesworth/bin/symbols:19:in `split': invalid byte sequence in US-ASCII (ArgumentError) 
(traceback) 

Vì vậy, khi chạy từ Tự động, chia đột nhiên không thích các ký tự không phải ASCII. Theo như tôi có thể nói, cả hai đang chạy từ cùng một phiên bản của Ruby (số phiên bản là như nhau).

Tôi không quá lo lắng về lý do tại sao chúng hoạt động khác nhau (nhưng nếu ai đó biết, điều đó thật tuyệt), nhưng tôi muốn có giải pháp để phân tách các ký tự không phải ASCII.

Nếu nó giúp, tôi cần phải tách văn bản tại một ký tự thành hai phần, vì vậy nếu một cái gì đó tương tự như mã thông báo của C sẽ hoạt động, tôi có thể sử dụng nó.

Trả lời

7

Bạn không chỉ định mã hóa của tệp. Vì không thể tự tin xác định mã hóa của tệp một cách đáng tin cậy, nên mã hóa phải được chỉ định rõ ràng. Nếu không, mã hóa bên ngoài được sử dụng, nếu mã hóa không được đặt, mã hóa được chỉ định trong môi trường sẽ được sử dụng và nếu môi trường không chỉ định mã hóa, tệp được giả định là trong 7 bit US-ASCII.

Trong trường hợp của bạn, có vẻ như có sự khác biệt trong hai môi trường (kịch bản tự động thường chạy trong môi trường rất hạn chế không có cài đặt miền địa phương) hoặc theo cách mà trình thông dịch được gọi.

Vì vậy, bạn cần phải làm điều gì đó như

File.read('/path/to/file', encoding: 'UTF-8') 
+0

Đó làm việc, cảm ơn bạn! –

1

Có vẻ như hai thiết bị này đang được chạy từ các môi trường khác nhau - với các giá trị LOCALE khác nhau.

Các vấn đề liên quan