Tôi đang xử lý dịch vụ web bên ngoài đang cung cấp cho tôi chuỗi (hoặc bị hỏng) mã hóa không chính xác (UTF-8
) có khả năng nhất là ISO LATIN
hoặc WINDOWS-1252
nhưng bây giờ là UTF-8
(và hoặc hỗn hợp ISO/WINDOWS/UTF-8). Một chiếc mũ đáng yêu (Â
) rất nhiều.Thư viện Java để sửa văn bản được mã hóa không chính xác bằng cách sử dụng chẩn đoán
Tôi rõ ràng không thể sửa cách dịch vụ web bên ngoài lưu trữ các chuỗi của nó để thông tin bị mất. Vì vậy, hy vọng một bản dịch 100% mà tôi biết là không thể.
Nhưng tôi đã hy vọng rằng ai đó đã viết một thư viện lập bản đồ heuristic ký tự trong Java (một số của nó không chắc sẽ gõ một mũ).
Nếu không tôi nghĩ tôi có thể cổng này kẻ mã PHP: https://stackoverflow.com/a/3521340/318174
UPDATE và Giải thích: Chuyển đổi đơn giản như @VGR đã trả lời với sẽ không hoạt động. Tôi không có byte gốc. Dữ liệu đã được chuyển đổi không chính xác tại điểm cuối (máy chủ SOAP có thể getBytes(/*with out correct encoding*/)
đã được thực hiện hoặc có thể dữ liệu được lưu trữ ở định dạng không chính xác). Khi bạn chuyển đổi byte thành chuỗi trong Java, dữ liệu sẽ không được giữ lại trừ khi mã hóa giống nhau ở mọi nơi. Điều này rất dễ hiểu nếu bạn nghĩ về một cái gì đó như ASCII
< ->UTF-8
. Với Windows-1252
hoặc ISO Latin
phức tạp hơn nhiều vì dữ liệu không bị mất nhưng thường bị nhầm lẫn. Đó là bởi vì các mã hóa đó có thể là hai byte và không phải là một tập con của UTF-8
.
Nếu bạn không tin tôi, bạn có thể thử làm getBytes()
quay lại với các mã hóa khác nhau và sẽ thấy dữ liệu bị hỏng và mất dữ liệu.
Tôi không nên làm phiền tôi nhưng nó luôn làm phiền tôi khi một số người bỏ phiếu để đóng bằng cách viết bình luận. –