Я получаю это на json.Marshal из списка строк:Удалить недопустимые символы UTF-8 символов из строки (Go языки)
json: invalid UTF-8 in string: "...ole\xc5\"
Причина очевидна, но как я могу удалить/заменить такие строки в Го? Я читал docst по unicode
и unicode/utf8
пакетам, и, похоже, нет очевидного/быстрого способа сделать это.
В Python, например, у вас есть методы для него, где недопустимые символы могут быть удалены, заменены заданным символом или строгим параметром, что вызывает исключение на недопустимых символах. Как я могу сделать эквивалентную вещь в Go?
UPDATE: Я имел в виду причину получения исключения (паника?) - незаконный символ в json.Marshal ожидает быть допустимой строкой UTF-8.
(как нелегальная последовательность байт попала в эту строка не важна, обычный способ - ошибки, файл с коррупцией, другие программы, которые не соответствуют юникоду и т.д.)
Как причина очевидна? Я бы предположил, что у вас есть строка latin1 (или какой-то другой вариант ISO8859), в этом случае вы не хотите, чтобы функция проглатывала эти символы, а вместо этого конвертировала их в UTF-8, прежде чем продолжить ... – filmor
@filmor: см. Обновить. – LetMeSOThat4U
В Go 1.2 парсер json примет неверный UTF-8. Он заменит неверные байты с помощью замещающего глифа. – fuz