Проблема кодирования в PostgreSQL для персидских/арабских символов [закрыто] ⇐ Python

Программы на Python
Anonymous
Проблема кодирования в PostgreSQL для персидских/арабских символов [закрыто]

Сообщение Anonymous »

Я работаю над настольным приложением Python для Windows для обменной компании, которая обрабатывает данные о денежных переводах из файлов Excel и сохраняет их в базе данных PostgreSQL. Проблема, с которой я столкнулся, заключается в проблемах с кодировкой персидских и арабских символов при хранении текстовых полей, таких как имена, брокеры и т. д.
Я установил для базы данных и клиента кодировку UTF-8, но я все еще получаю поврежденные символы в своей таблице PostgreSQL. Вот краткий обзор проблемы:
Взгляд на таблицу
Я пытаюсь решить эту проблему, нормализуя символы с помощью функции Python перед их вставкой в ​​базу данных:

Код: Выделить всё

replacement_map = {
'\u06cc': '\u064a',  # Persian 'ی' to Arabic 'ي'
'\u06a9': '\u0643',  # Persian 'ک' to Arabic 'ك'
'\u06F0': '\u0660',  # Persian '۰' to Arabic '٠'
'\u06F1': '\u0661',  # Persian '۱' to Arabic '١'
'\u06F2': '\u0662',  # Persian '۲' to Arabic '٢'
'\u06F3': '\u0663',  # Persian '۳' to Arabic '٣'
'\u06F4': '\u0664',  # Persian '۴' to Arabic '٤'
'\u06F5': '\u0665',  # Persian '۵' to Arabic '٥'
'\u06F6': '\u0666',  # Persian '۶' to Arabic '٦'
'\u06F7': '\u0667',  # Persian '۷' to Arabic '٧'
'\u06F8': '\u0668',  # Persian '۸' to Arabic '٨'
'\u06F9': '\u0669'   # Persian '۹' to Arabic '٩'
}

def replace_problematic_characters(text):
if text:  # Check if text is not None
for persian_char, arabic_char in replacement_map.items():
text = text.replace(persian_char, arabic_char)
return text

Функция вставки:

Код: Выделить всё

def insert_data_to_db(conn, data):
cursor = conn.cursor()
query = """
INSERT INTO variziha (name, amount, transaction_number, seri, broker)
VALUES (%s, %s, %s, %s, %s)
"""
try:
for item in data:
name = replace_problematic_characters(item[0])
broker = replace_problematic_characters(item[4])
amt = item[1]
t_id = item[2]
seri = item[3]

modified_item = (name, amt, t_id, seri, broker)

try:
cursor.execute(query, modified_item)
conn.commit()
except psycopg2.Error as e:
conn.rollback()
print(f"Error inserting row: {modified_item}")
print(f"Error message: {e}")
print(f"Finished inserting data. Total rows processed: {len(data)}")
except psycopg2.Error as e:
conn.rollback()
print(f"An error occurred while inserting data: {e}")
finally:
cursor.close()

Несмотря на нормализацию этих символов перед вставкой данных, вывод в таблице PostgreSQL по-прежнему поврежден. Кто-нибудь сталкивался с этой проблемой раньше? Как решить эту проблему с кодировкой?
Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/790 ... characters

Вернуться в «Python»