Служба восходящего потока считывает поток байтов UTF-8, предполагает , что это ISO-8859-1, применяет ISO-8859-1 к кодировке UTF-8 и отправляет их в мою службу, помеченнуюкак UTF-8.
вышестоящая служба находится вне моего контроля.Они могут это исправить, возможно, это никогда не будет исправлено.
Я знаю, что могу исправить кодировку, применив UTF-8 к кодировке ISO-8859-1, затем пометив байты как UTF-8.Но что произойдет, если мой апстрим исправит их проблему?
Есть ли способ обнаружить эту проблему и исправить кодировку только тогда, когда я найду плохую кодировку?
Я тоже не уверен, что кодировкой восходящего потока является ISO-8859-1.Я думаю, что исходным кодом является perl, так что кодирование имеет смысл, и каждый пример, который я пробовал, правильно декодируется, когда я применяю кодировку ISO-8859-1.
Когда источник отправляет e4 9c 94
(✔) в мой апстрим, мой апстрим отправляет мне c3 a2 c2 9c c2 94
(â).
- utf-8 string
✔
как байты: e4 9c 94
- байты
e4 9c 94
как строка latin1: â
- строка utf-8
â
как байты: c3 a2 c2 9c c2 94
Я могу это исправить, применив upstream.encode('ISO-8859-1').force_encoding('UTF-8')
, но он сломается, как только проблема с вышестоящей версией будет исправлена.