2012-07-23 24 views
9

Vì vậy, tôi đang cố tải xuống tệp zip từ trang web và đưa dữ liệu đó vào bảng. Quá trình tải xuống đã hoạt động trước đó, nhưng đột nhiên, nó không còn nữa. Tôi nhận được một "ghi": "\ xB6" từ ASCII-8BIT để UTF-8 (Encoding :: UndefinedConversionError) "vấn đề. Rất lạ, không có gì thay đổi kể từ lần cuối tôi chạy kịch bản. Đây là một phần của mã có vấn đề. Tôi đang sử dụng một viên ngọc cho phép tôi phân tích cú pháp tệp DBF trong tệp zip.Mã hóa Lỗi xác định chuyển đổi - Ruby on Rails, Lỗi khi viết

Dưới đây là các mã:

`write': "\xB6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) 

Thanks for the help

UPDATE: Tôi đang chạy trong đường ray, rõ ràng. Tôi chạy kịch bản bên ngoài môi trường đường ray, và nó hoạt động tốt. Vì vậy, Rails đang can thiệp bằng cách nào đó với quá trình viết.

CẬP NHẬT 2: GIẢI PHÁP - Tôi đã thay đổi "w" thành "wb" rõ ràng điều này là do đường ray 3+. Đã không xảy ra với tôi để thử điều này trước đây. Hy vọng rằng điều này sẽ giúp người khác.

Trả lời

2

Bạn có lẽ cũng có thể thực hiện nó bằng cách thông qua

:output_encoding => "binary" 

để File.open, mà tôi nghĩ rằng sẽ làm điều tương tự như chế độ 'wb', có lẽ rõ ràng hơn. Nhưng công việc tốt đẹp tìm ra 'wb' :).

Vâng, trong ruby ​​1.9, đó là mã hóa char nhận thức, bạn thường cần phải nói những điều khác nhau về mã hóa bạn muốn, bao gồm cả "mã hóa rỗng" 'nhị phân'.

Có thể Rails đang đặt Encoding.default_external thành UTF-8 và File đang sử dụng Encoding.default_external, đó có thể là lý do tại sao đường ray và đường ray không tạo sự khác biệt.

Sự cố mã hóa trong ruby ​​1.9 chắc chắn có thể rất khó hiểu rất nhanh, với nhiều trạng thái ẩn thông thường có thể ảnh hưởng chính xác đến những gì xảy ra.

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