2014-11-20 2 views
0

Я получаю следующее сообщение об ошибке при попытке отсортировать текстовый файл на OSX (Баш):«Неверная последовательность байтов» в bash, как его найти?

 
sort: string comparison failed: Illegal byte sequence 
sort: Set LC_ALL='C' to work around the problem. 
sort: The strings compared were ‘\363\272\331DR\371’ and ‘201310’. 

Веб полон советы, чтобы установить LC_ALL как ошибка рекомендует. Однако я хотел бы найти местоположение этой незаконной последовательности байтов.

Я разбираю данные из большого количества сторонних лиц, выполняя все виды нормализации, прежде чем записывать их в один файл, который в конечном итоге загружается в базу данных. В этих данных не должно быть причудливых символов, и эта ошибка говорит мне, что в этом процессе есть коррупция. Однако я не могу его найти!

Я попытался «разбить» файл на более мелкие и мелкие части, чтобы я мог визуально найти персонажа, но я не могу. Я не могу его grep, найти в vim или в sublimetext.

Любые идеи, как я могу найти местонахождение этой коррупции?

+0

Похоже, что некоторые символы ASCII используются где-то. Может быть, вы могли бы попытаться преобразовать все входные данные в UTF-8, прежде чем использовать его, и соответственно настроить среду? – flob

+1

Как вы сели? 'LC_ALL = C fgrep $ '\ 363 \ 272 \ 331DR \ 371' yourinput' –

ответ

1

Помогает ли это вам?

grep -n $(echo -e '\0363\0272\0331DR\0371') filename 

Чтобы сделать что-то автоматически, вы можете рассмотреть вопрос об изменении исходного кода

Coreutils-8,23/Библиотека/xmemcoll.c

static void 
collate_error (int collation_errno, 
       char const *s1, size_t s1len, 
       char const *s2, size_t s2len) 
{ 
    error (0, collation_errno, _("string comparison failed")); 
    error (0, 0, _("Set LC_ALL='C' to work around the problem.")); 
    error (exit_failure, 0, 
     _("The strings compared were %s and %s."), 
     quotearg_n_style_mem (0, locale_quoting_style, s1, s1len), 
     quotearg_n_style_mem (1, locale_quoting_style, s2, s2len)); 
} 

По крайней мере, таким образом, вы можете легко написать мусор мусорное ведро -file, чтобы поместить все эти строки для проверки.

Смежные вопросы