2025, Oct 07 13:32

Windows पर Odoo 18 में psycopg2 UnicodeDecodeError (0xe7/ç) कैसे ठीक करें

Windows पर Odoo 18 स्टार्ट के बाद psycopg2 का UnicodeDecodeError (byte 0xe7/ç) क्यों आता है और समाधान: DSN, Odoo config, PGHOST/PGUSER व पाथ से non-UTF-8 अक्षर हटाएँ और सही कनेक्शन सेट करें.

Windows पर Odoo 18 साफ़-सुथरे तरीके से शुरू हो सकता है, ऐडऑन लोड कर सकता है, और फिर HTTP सेवा शुरू होते ही psycopg2 से आने वाले UnicodeDecodeError के साथ क्रैश हो सकता है। त्रुटि आमतौर पर byte 0xe7 पर UTF‑8 डिकोडिंग विफलता जैसी दिखती है, जो अक्षर ç से मेल खाती है। व्यवहार में, यह संकेत देता है कि PostgreSQL से कनेक्ट करने के लिए उपयोग की जाने वाली डेटाबेस कनेक्शन जानकारी में कहीं कोई non‑UTF‑8 अक्षर घुस आया है।

संदर्भ में पुनरुत्पादन

नए क्लोन पर, जहाँ वर्चुअल एनवायरनमेंट और सभी निर्भरताएँ स्थापित हैं, सर्वर इस तरह शुरू किया जाता है:

PS D:\tarefas\trarefa_kaue_1\teste\odoo> python odoo-bin -r odoo -w 123

लॉग दिखाते हैं कि सर्वर शुरू हो जाता है, लेकिन उसके तुरंत बाद एक बैकग्राउंड थ्रेड यह फेंकता है:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 78: invalid continuation byte

असल में क्या हो रहा है

विफलता psycopg2.connect के भीतर से आती है, जब वह PostgreSQL के लिए DSN (कनेक्शन स्ट्रिंग) को बनाता या पार्स करता है। 0xe7 की मौजूदगी का मतलब है कि कनेक्शन पाथ में कहीं अक्षर ç (c cedille) है और उसे UTF‑8 के रूप में नहीं पढ़ा जा रहा। यह अक्षर कई जगहों पर हो सकता है: डेटाबेस नाम, उपयोगकर्ता नाम, होस्ट नाम, या उस Windows पाथ के किसी हिस्से में जिसे स्टैक कॉन्फ़िग ढूँढने के लिए इस्तेमाल करता है। जब इन में से किसी भी मान में ç (या कोई समान non‑ASCII अक्षर) हो, तो psycopg2 का डिकोडिंग चरण पहली क्रॉन थ्रेड के दौरान या किसी भी डेटाबेस एक्सेस पर फट सकता है।

वह 0xe7 दरअसल ç अक्षर है। आपके डेटाबेस DSN (कनेक्शन स्ट्रिंग, डेटाबेस नाम...) या किसी Windows पर्यावरण चर में कहीं कोई non‑UTF‑8 अक्षर है (संभावना है कि किसी फ़ोल्डर, उपयोगकर्ता, या होस्ट नाम में ç हो...).

Windows पर DSN कहाँ से आता है

Odoo, psycopg2 को कनेक्शन पैरामीटर देता है। ये पैरामीटर एक तय क्रम में कई जगहों से लिए जाते हैं। सबसे पहले odoo-bin के आर्ग्युमेंट्स। आप कमांड लाइन पर सीधे डेटाबेस नाम, उपयोगकर्ता, पासवर्ड, होस्ट और पोर्ट दे सकते हैं, साथ ही addons और कॉन्फ़िग के पाथ भी। संदर्भ के लिए, सामान्य स्विच इस प्रकार हैं:

-d <databasename> --database <databasename>
-r <user>        --db_user <user>
-w <password>    --db_password <password>
--db_host <hostname>
--db_port <port>
-c <config>      --config <config>
-D <data-dir-path> --data-dir <data-dir-path>

अगर कमांड लाइन पर ये पूरी तरह न दिए गए हों, तो Odoo वही पैरामीटर भरने के लिए कॉन्फ़िगरेशन फ़ाइल पढ़ता है। एक न्यूनतम उदाहरण इस तरह दिखता है:

db_host = localhost
db_port = 5432
db_user = odoo
db_password = 123

यदि कुछ अब भी गायब हो, तो psycopg2 मानक PostgreSQL पर्यावरण चर को मान देता है। महत्वपूर्ण वाले हैं PGHOST, PGPORT, PGUSER, PGPASSWORD और PGDATABASE। अंत में, Windows पर एक PostgreSQL सेवा फ़ाइल भी होती है जो सेटिंग्स प्रदान कर सकती है: %APPDATA%\postgresql\pg_service.conf। इन में से किसी भी स्रोत से DSN में non‑UTF‑8 अक्षर आ सकता है।

इसे कैसे ठीक करें

इस स्थिति में सबसे संभावित कारण DSN इनपुट में से किसी एक में मौजूद non‑UTF‑8 अक्षर है, विशेषकर ç। कनेक्शन पाथ में जहाँ भी यह दिखे, उसे हटा दें। odoo-bin के आर्ग्युमेंट्स, Odoo की कॉन्फ़िगरेशन फ़ाइल, PG* पर्यावरण चर और Windows की PostgreSQL सेवा फ़ाइल की जाँच करें। साथ ही उन फ़ोल्डर, उपयोगकर्ता या होस्ट नामों पर भी ध्यान दें जो अप्रत्यक्ष रूप से संदर्भित होते हैं और जिनमें ç हो सकता है। यह सुनिश्चित करें कि host, database, user और password के वास्तविक मान साधारण ASCII या वैध UTF‑8 हों।

सैनिटी चेक के तौर पर, यह पक्का करें कि कनेक्शन को फीड करने वाली Odoo कॉन्फ़िगरेशन सामग्री विशेष अक्षरों से मुक्त हो। स्वच्छ बेसलाइन कुछ ऐसी होगी:

db_host = localhost
db_port = 5432
db_user = odoo
db_password = 123

यदि आप पहले पर्यावरण चर पर निर्भर थे, तो जाँचें कि उनमें ç और उससे मिलते-जुलते अक्षर नहीं हैं। संबंधित चर ये हैं:

PGHOST
PGPORT
PGUSER
PGPASSWORD
PGDATABASE

जब ये मान सही या स्वच्छ कर दिए जाते हैं, तो सर्वर को cron स्टार्टअप के बाद UnicodeDecodeError के बिना आगे बढ़ना चाहिए।

Windows-आधारित Odoo स्टैक के लिए यह क्यों मायने रखता है

Windows के पाथ, प्रोफ़ाइल और होस्टनेम में अक्सर उच्चारित/एक्सेंट वाले अक्षर होते हैं, जो आसानी से सेवा फ़ाइलों और पर्यावरण चर में पहुँच जाते हैं। psycopg2 जैसे डेटाबेस क्लाइंट एन्कोडिंग को लेकर सख्त होते हैं और तुरंत असफल हो जाते हैं—यह मददगार है, पर विघटनकारी भी, खासकर जब आपको पता न हो कि DSN कहाँ बन रहा है। Odoo और psycopg2 कनेक्शन पैरामीटर किन-किन जगहों पर ढूँढते हैं, यह जानना अनुमान लगाने में लगने वाला समय बचा देता है।

मुख्य बातें

जब Windows पर Odoo 18, psycopg2 से आए UnicodeDecodeError के साथ क्रैश हो और byte 0xe7 का ज़िक्र करे, तो DSN इनपुट की पूरी शृंखला में ç अक्षर खोजें। कमांड‑लाइन आर्ग्युमेंट्स, Odoo की कॉन्फ़िगरेशन फ़ाइल, PG* पर्यावरण चर, और %APPDATA%\postgresql के तहत Windows PostgreSQL सेवा फ़ाइल की जाँच करें। कनेक्शन मानों को ASCII या वैध UTF‑8 में रखें—और सर्वर साफ़-सुथरे ढंग से शुरू होगा।

यह लेख StackOverflow पर प्रश्न (लेखक: Kaue Martins) और Ahrimann Steiner के उत्तर पर आधारित है।