PostgreSQL экранирует специальные символы Microsoft в запросе выбора

PostgreSQL, DBvisualizer и Salesforce

Я выбираю записи из таблицы базы данных и экспортирую их в файл csv: с разделителями-запятыми и в кодировке UTF8. Я отправляю файл пользователю, который загружает данные в Salesforce. Я не знаком с Salesforce, поэтому я совершенно не разбираюсь в этом вопросе. Она сообщает, что некоторые данные в файле отображаются как тарабарские (не UTF8) символы (см. ниже).

Похоже, что некоторые из наших пользователей копируют/вставляют электронные письма в веб-форму, которая затем вставляет их в нашу базу данных. Даты из заголовков электронной почты (я полагаю) — это текст, который отображается как тарабарщина.

11‎/‎17‎/‎2015‎ ‎7‎:‎26‎:‎26‎ ‎AM

становится

‎11‎/‎16‎/‎2015‎ ‎07‎:‎26‎:‎26‎ ‎AM

Текст в поле db выглядит нормально. Это когда он экспортируется в файл csv, а затем этот файл просматривается в текстовом редакторе, таком как Wordpad или Salesforce. Затем она видит странные символы.

Это происходит только с датами из текста, который копируется/вставляется в форму/БД. Я понятия не имею, как или есть ли способ удалить эти «невидимые» символы.

Каждый раз это одни и те же три символа: ‎ Я сделал для них regex_replace(), чтобы удалить их, но это не работает. Я думаю, что, поскольку они не видны в поле db, регулярное выражение их видит.

Кажется, что, хотя я не вижу эти символы, они должны быть там в какой-то форме, которая заставляет их отображаться в текстовых редакторах, таких как Wordpad или клиент Salesforce, после экспорта в csv.

Я, вероятно, могу сделать массовый поиск/найти/заменить в текстовом редакторе, но было бы неплохо сделать это в sql и каждый раз избегать лишнего шага.

Надеюсь, кто-то видел это и знает простое решение.

Спасибо за любые идеи или указатели, которые могут помочь.


person John Cowan    schedule 14.08.2019    source источник


Ответы (1)


Последовательность ‎ представляет собой отметку слева направо, закодированную в UTF- 8 (как 0xE2 0x80 0x8E), но читается как в Windows-1252.

Метка слева направо невидима, поэтому тот факт, что вы не видите ее в базе данных, говорит о том, что она закодирована правильно, но, не зная точно, по какому пути пошли данные после этого, трудно догадаться, где именно они были неверно истолкованы. .

В любом случае вы должны иметь возможность заменить символ в запросе Postgres, используя его управляющую последовательность Unicode: E'\u200E'

person Nick Barnes    schedule 15.08.2019