Tôi nhận được một số dữ liệu chuỗi từ web và tôi nghi ngờ rằng nó không phải lúc nào cũng giống như những gì nó nói. Tôi không biết vấn đề là ở đâu, và tôi không quan tâm nữa. Từ ngày đầu tiên trên dự án này, tôi đã chiến đấu với mã hóa chuỗi Ruby. Tôi thực sự muốn một số cách để nói: "Đây là một chuỗi. Nó là gì?", Và sau đó sử dụng dữ liệu đó để có được nó để UTF-8 để nó không phát nổ gsub()
2.000 dòng xuống trong độ sâu của ứng dụng của tôi. Tôi đã kiểm tra rchardet
, nhưng mặc dù nó được cho là hoạt động cho 1,9 bây giờ, nó chỉ thổi lên cho bất kỳ đầu vào với nhiều byte ... mà không phải là hữu ích.Phát hiện mã hóa
Trả lời
Có thể thử đọc nội dung này: http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/
Hãy thử cài đặt chúng trong môi trường của bạn.
export LC_ALL=en_US.UTF-8 export LC_CTYPE=en_US.UTF-8
Hãy thử ruby -EBINARY
hoặc ruby -EASCII-8BIT
chỉ huy dòng
Hãy thử thêm -Ku
hoặc -Kn
vào dòng lệnh ruby của bạn.
Bạn có thể dán thông báo lỗi không?
Cũng thử này: http://github.com/candlerb/string19/blob/master/string19.rb
Không thể nói từ một chuỗi những gì mã hóa nó là trong Bạn luôn cần một số siêu dữ liệu bổ sung mà sẽ cho bạn biết những gì mã hóa của chuỗi là..
Nếu bạn nhận được chuỗi từ web, siêu dữ liệu đó nằm trong tiêu đề HTTP. Nếu tiêu đề HTTP sai, hoàn toàn không có gì mà bạn hoặc Ruby hoặc bất kỳ ai khác có thể làm. Bạn cần phải gửi một lỗi với quản trị viên web của trang web nơi bạn đã nhận chuỗi và đợi cho đến khi sửa lỗi. Nếu bạn có Thỏa thuận mức dịch vụ với trang web, hãy gửi một lỗi, chờ một tuần, sau đó kiện họ.
Không thể biết chắc chắn, nhưng bạn có thể đoán được. Đó là những gì rchardet làm. Tuy nhiên, tôi đã không thể làm cho nó hoạt động với Ruby 1.9. – ThomasW
Cũ câu hỏi, nhưng chardet hoạt động trên 1.9: http://rubygems.org/gems/chardet
Đừng bận tâm, có vẻ như tôi sai về điều này. Chuỗi # encoding on 1.9 cho bạn biết mã hóa chuỗi đang ở trong đó. –
Chúng tôi đã có một số kinh nghiệm tốt với ensure_encoding. Nó thực sự làm công việc cho chúng tôi để chuyển đổi các tập tin tài nguyên có mã hóa chưa biết đến UTF-8.
README sẽ cung cấp cho bạn một số gợi ý tùy chọn nào phù hợp với hoàn cảnh của bạn.
Tôi chưa bao giờ thử sử dụng chardet vì assurance_encoding thực hiện công việc tốt cho chúng tôi.
Tôi đã trả tiền here cách chúng tôi sử dụng Ensure_encoding.
Bạn thực sự không thể phát hiện mã hóa. Bạn chỉ có thể giả định nó.
Đối với hầu hết các ứng dụng ngôn ngữ phương Tây, cấu trúc sau đây sẽ hoạt động. Mã hóa truyền thống thường là "ISO-8859-1". Mã hóa mới và ưa thích là UTF-8. Tại sao không chỉ đơn giản là cố gắng để mã hóa nó với UTF-8 và dự phòng với các bảng mã cũ
def detect_encoding(str)
begin
str.encode("UTF-8")
"UTF-8"
rescue
"ISO-8859-1"
end
end
tại sao không thử sử dụng https://github.com/brianmario/charlock_holmes để có được mã hóa chính xác. Sau đó cũng sử dụng nó để chuyển đổi sang UTF8
require 'charlock_holmes'
class EncodeParser
def initialize(text)
@text = text
end
def detected_encoding
CharlockHolmes::EncodingDetector.detect(@text)[:encoding]
end
def convert_to_utf8
CharlockHolmes::Converter.convert(@text, detected_encoding, "UTF-8")
end
end
sau đó chỉ cần sử dụng EncodeParser.new (văn bản) .detected_encoding hoặc EncodeParser.new (văn bản).convert_to_utf8
- 1. Phát hiện mã hóa base64
- 2. Python phát hiện mã hóa byte chuỗi
- 3. Tự động phát hiện mã hóa ký tự trong Java
- 4. Làm cách nào để phát hiện mã hóa của tệp?
- 5. Thuật toán phát hiện mã hóa ký tự
- 6. Cách phát hiện mã hóa tốt nhất trong tệp XML?
- 7. Bộ mã hóa biểu thức 4 SDK phát hiện lỗi DCOM khi phát trực tuyến
- 8. Mã hóa có phát âm được không?
- 9. Phát video được mã hóa bằng AVPlayer
- 10. Thực hiện mã hóa gpg trong Ruby
- 11. làm thế nào để phát hiện mã hóa các tập tin csv tải lên
- 12. Cách phát hiện mã hóa bộ ký tự nào trong Java?
- 13. Làm cách nào để phát hiện xem tệp có được mã hóa bằng UTF-8 không?
- 14. iOS, phát hiện ad-hoc từ mã
- 15. Phát hiện DesignTime trong mã WP7
- 16. Phát hiện mã chết trong ruby
- 17. Máy phát hiện mã tương tự
- 18. Trình phát hiện mã trùng lặp Javascript?
- 19. phân tích mã tĩnh, phát hiện các mã thông thường
- 20. Xác thực nhà phát hành mã thông báo bảo mật được mã hóa bằng Mã hóa web JSON (JWE)?
- 21. Những cạm bẫy trong mã của tôi để phát hiện mã hóa tệp văn bản bằng Python?
- 22. C# MailMessage để phát trực tuyến - sự cố mã hóa
- 23. công cụ phát hiện mã trùng lặp chung
- 24. Oracle SQL môi trường phát triển mã hóa
- 25. Tiêu chuẩn mã hóa để phát triển ứng dụng iphone
- 26. C# XNA: Tối ưu hóa việc phát hiện va chạm?
- 27. Công cụ phát hiện mã sao chép/dán trong TSQL?
- 28. Cách lập trình phát hiện loại mã hóa và mức mã hóa từ thiết bị mạng không dây từ máy chủ Windows 2003
- 29. Mã hóa mã hóa trong TWIG
- 30. Chế độ mã hóa mã hóa và xác thực
Trong Ruby, bạn có thể kiểm tra mã hóa chuỗi bằng 'str.encode.name'. Bạn có thể chỉ định mã hóa luồng/tệp tại thời điểm kết nối/mở. Ví dụ. 'fh = File.open (file_in," rb: utf-16le ")' (thông báo, mã hóa không phải 8 bit cần đọc nhị phân). Khi ghi vào một tập tin, bạn cũng nên chỉ định mã hóa. –