Как использовать uniVocity-парсеры для обработки непечатаемого символа
Я хотел бы использовать Java с uniVocity-парсерами для синтаксического анализа данных CSV, которые создаются MySQL select into outfile
,
Теперь я сталкиваюсь с одной ситуацией обработки непечатных символов! Таблица MySQL содержит bit(1)
столбец и при использовании select into outfile
чтобы сохранить его данные в файл, я обнаружил, что bit(1)
данные столбца становятся непечатными. При использовании uniVocity-парсеров для получения строковых данных я получаю null
значение bit(1)
колонны. Я ожидаю получить реальные данные bit(1)
колонка. Что я должен делать?
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);
Надеюсь это поможет