Не-ISO расширенный -ASCII CSV, дающий специальный символ при импорте в БД

#postgresql #encoding #amazon-s3

#postgresql #кодирование #amazon-s3

Вопрос:

Я получаю CSV с сервера S3 и вставляю его в PostgreSQL с помощью java.

 S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
BufferedReader reader = new BufferedReader(
                           new InputStreamReader(object.getObjectContent())
                        );
  

Для некоторых строк значение в столбце содержит специальные символы � . Я пытался использовать кодировки UTF-8, UTF-16 и ISO-8859-1 InputStreamReader , но это не сработало.
Когда используется кодировка WIN-1252, в БД по-прежнему отображаются некоторые специальные символы, но когда я экспортирую данные в CSV, они отображают те же символы, которые я нашел в необработанном файле.
Но опять же, когда я открываю файл в Блокноте, символ в порядке, но когда я открываю его в Excel, появляется тот же специальный символ.

Комментарии:

1. Формулировка проблемы неясна. Пожалуйста, покажите код, который вы используете для вставки данных в базу данных. На какое значение вы устанавливаете кодировку клиента PostgreSQL? Какова кодировка базы данных PostgreSQL? Какие байты вы найдете в исходном файле? Как и с какой клиентской кодировкой вы снова экспортируете данные из базы данных? Какие байты находятся во втором экспортированном файле?

2. Кроме того, можете ли вы привести пример? Даже если вы не уверены на 100% в кодировках, мы можем подтвердить ваши предположения на основе реальных символов.

Ответ №1:

Все материалы PostgreSQL совершенно неуместны; PostgreSQL может работать практически с любой кодировкой. Проверьте свои данные с помощью утилиты, например, enca чтобы определить, как они закодированы, и установите сеанс PostgreSQL в эту кодировку. Если сервер находится в той же кодировке или в какой-либо кодировке Unicode, он должен работать нормально.