Tôi đang kéo văn bản từ các trang web từ xa và cố gắng tải nó vào ứng dụng Ruby 1.9/Rails 3 sử dụng utf-8 theo mặc định.Chuyển đổi các ký tự không phải ASCII từ ASCII-8BIT sang UTF-8
Dưới đây là một ví dụ về một số văn bản vi phạm:
vẻCancer Res; 71(3); 1-11. ©2011 AACR.\n
Đó là mã bản quyền mở rộng như thế này:
Cancer Res; 71(3); 1-11. \xC2\xA92011 AACR.\n
của Ruby nói với tôi chuỗi được mã hóa như ASCII-8 bit và ăn vào của tôi Ứng dụng Rails mang lại cho tôi điều này:
incompatible character encodings: ASCII-8BIT and UTF-8
Tôi có thể xóa mã bản quyền bằng cách sử dụng lại gex
str.gsub(/[\x00-\x7F]/n,'?')
để sản xuất này
Cancer Res; 71(3); 1-11. ??2011 AACR.\n
Nhưng làm thế nào tôi có thể nhận được một biểu tượng quyền tác giả (và nhiều biểu tượng khác như thư từ Hy Lạp) chuyển vào cùng một biểu tượng trong UTF-8? Chắc chắn nó có thể ...
tôi thấy tài liệu tham khảo để sử dụng force_encoding nhưng điều này không làm việc:
str.force_encoding('utf-8').encode
Tôi nhận ra có rất nhiều người khác với vấn đề tương tự nhưng tôi chưa thấy một giải pháp mà công trinh.
Bạn kéo văn bản từ các trang web từ xa như thế nào? Cạo trang? Vui lòng hiển thị một số mã mẫu, bao gồm cả ứng dụng khách HTTP mà bạn đang sử dụng và liệu bạn có đang phân tích cú pháp các trang bằng Nokogiri, Hpricot hoặc ReXML hay không. Vấn đề này có thể là kết quả của cách bạn truy xuất trang và/hoặc cách bạn phân tích trang. Khi chúng tôi biết bạn đang kéo nội dung theo cách an toàn dữ liệu, chúng tôi có thể giúp bạn chuyển đổi dữ liệu giữa các bộ mã. –
Mã đơn giản thực sự - mở-uri và nokogiri - ví dụ: doc = Nokogiri :: XML (mở (url)) rồi văn bản doc.css (...) để kéo các khối văn bản có liên quan –
Vui lòng hiển thị mã mẫu. Tệp bạn đang truy xuất HTML hay XML? Nokogiri quan tâm đến sự khác biệt khi phân tích cú pháp. Ngoài ra, hãy cung cấp một số URL, bởi vì mọi trang web trên internet đều khác nhau. –