В базе материализовалась запись, которая приводит к ошибкам вида org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0xed 0x70 0x69
. Возникает такое когда кто-то сделал изменение в таблице, но при этом соединение с базой не было настроено на UTF-8.
По прошлому опыту, данные вставили в кодировке latin1 и там будут символы вроде "í", "é", "á" или им подобные. Можно записать байтики в файлик и использовать его как паттерн для grep, но захотелось возможности грепать сразу в виде байтов.
Вот тут советуют ставить grep в неудобную позу и иногда оно даже работает, но для нескольких кейсов у меня не прошло. С этой же странички узнал для себя несколько новых тулов: binwalk и bgrep. Про binwalk уже слышал ранее в контексте ковыряния прошивок, а про bgrep слышу впервые.
binwalk
$ binwalk -R "\xED\x70\x69" dump.sql DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 18 0x12 Raw signature (\xED\x70\x69)
bgrep
Bgrep оказался именно тем тулом, который я искал - простой и очень быстрый.
$ bgrep "ED 70 69" dump.sql dump.sql: 00000012
Есть поддержка вывода байтов до, после и с обеих сторон от совпадения
$ bgrep -C 10 "ED 70 69" dump.sql dump.sql: 00000012 sta Club H\xedpico poni
Для тех же кто предпочитает GUI есть вариант просто воспользоваться HEX редактором.
Комментариев нет:
Отправить комментарий