Đánh giá từ tất cả mọi thứ bạn đã nói, nó có vẻ như chuỗi Odómetro ban đầu bạn đang làm việc với được mã hóa với ISO 8859-1, không UTF-8. Đây là lý do tại sao tôi nghĩ như vậy: json_encode sản xuất đầu ra parseable sau khi bạn chạy các chuỗi đầu vào thông qua utf8_encode, mà chuyển đổi từ ISO 8859-1 sang UTF-8. Bạn có nói là bạn đã "đọc sai" đầu ra khi sử dụng print_r sau khi làm utf8_encode, nhưng đầu ra đã bị đọc sai bạn có thực sự là chính xác những gì sẽ xảy ra bằng cách cố gắng để phân tích UTF-8 văn bản như ISO 8859-1 (ó là X63 xb3 trong UTF-8, nhưng trình tự đó là ó trong ISO 8859-1. htmlentities bạn giải pháp hackaround làm việc. htmlentities cần phải biết những gì các mã hóa của chuỗi đầu vào để làm việc một cách chính xác. Nếu bạn không chỉ định một, nó giả ISO 8859-1. (html_entity_decode, gây nhầm lẫn, mặc định là UTF-8, vì vậy phương pháp của bạn có tác dụng chuyển đổi từ ISO 8859-1 sang UTF-8). Bạn nói rằng bạn đã có cùng một vấn đề trong Python, điều này dường như không bao PHP từ được vấn đề này. PHP sẽ sử dụng uXXXX thoát, nhưng như bạn lưu ý, đây là hợp lệ JSON. Vì vậy, nó có vẻ như bạn cần phải cấu hình kết nối của bạn để Postgres để nó sẽ cung cấp cho bạn UTF-8 dây. Tài liệu PHP cho thấy bạn muốn làm điều này bằng các tùy chọn thêm = '- client_encoding = UTF8' vào chuỗi kết nối. Ngoài ra còn có khả năng rằng các dữ liệu hiện đang được lưu trữ trong cơ sở dữ liệu trong bảng mã sai. (Bạn có thể chỉ cần sử dụng utf8_encode, nhưng điều này sẽ chỉ hỗ trợ các ký tự mà là một phần của tiêu chuẩn ISO 8859-1). Sau cùng, như một câu trả lời ghi chú khác, bạn cần phải chắc chắn rằng bạn khai báo các charset đúng đắn, với một HTTP header hay khác (tất nhiên, vấn đề này cụ thể đã chỉ là một tạo tác của môi trường nơi bạn đã làm xét nghiệm print_r của bạn).
đang được dịch, vui lòng đợi..