2016-09-04 6 views
1

Я хотел бы использовать Java с uniVocity-parsers для анализа данных csv, который создается mysql select into outfile.Как использовать uniVocity-парсеры для обработки непечатаемого символа

Теперь я сталкиваюсь с одной ситуацией обработки непечатаемых символов! Таблица mysql содержит столбец bit(1) и при использовании select into outfile для сохранения данных в файл, я обнаружил, что данные столбца bit(1) становятся непечатаемыми символами. При использовании uniVocity-parsers для получения данных линии, я получаю null значение столбцов bit(1). Я ожидаю получить реальные данные колонки bit(1). Что мне делать ?

+0

Можете ли вы предоставить фрагмент CSV, который вы пытаетесь разобрать, чтобы я мог посмотреть? –

+0

[данные csv с непечатаемыми символами] (http://od0hvfbed.bkt.clouddn.com/data/txt/tab_web_user-unhex-data.txt) – CrazyPig

ответ

1

Проблема здесь состоит в том, что bit(1) значения экспортируются по MySQL в качестве символов \u0000 и \u0001 и синтаксического анализа по умолчанию, урезает все значения (что означает любой символ <= ' '). Процесс обрезки уничтожит \u0000 и \u0001, так как их целые представления представляют собой 0 и 1 соответственно, тогда как целочисленное представление символа пробела ' ' равно 32.

Вам просто нужно настроить этот анализатор для предотвращения обрезки значения:

settings.trimValues(false); 

Кроме того, файл, который вы дали есть строки, законченные \r\n. Если разобрать это на OSX или Linux вам нужно определить окончания строк в явном виде:

settings.getFormat().setLineSeparator("\r\n"); 

Или включить автоматическое обнаружение с:

settings.setLineSeparatorDetectionEnabled(true); 

Надеется, что это помогает

+0

Да, вы правы! Я отлаживал исходный код и нашел ответ, почему персонажи, не подлежащие печати, будут проигнорированы! Большое спасибо! – CrazyPig

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