Как использовать 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);

Надеюсь это поможет

Другие вопросы по тегам