Đây là những gì tôi làm khi khắc phục sự cố mã hóa. (Giá trị NLS_LANG được đọc bởi sqlplus):
SQL>/* It's a hack. I don't know why it works. But it does!*/
SQL>@[%NLS_LANG%]
SP2-0310: unable to open file "[NORWEGIAN_NORWAY.WE8MSWIN1252]"
Bạn sẽ phải trích xuất giá trị NLS_LANG trong ORACLE_HOME hiện tại từ sổ đăng ký. Tất cả các công cụ phía máy khách (sqlplus, sqlldr, exp, imp, oci, v.v.) đọc giá trị này từ sổ đăng ký và xác định xem có xảy ra bất kỳ quá trình chuyển mã ký tự nào hay không.
ORACLE_HOME và phần đăng ký:
C:\>dir /s/b oracle.key
C:\Oracle10\BIN\oracle.key
C:\>type C:\Oracle10\BIN\oracle.key
SOFTWARE\ORACLE\KEY_OraClient10204_Home
Trong những lúc như thế này, tôi chuyển sang IPython để thể hiện một ý tưởng:
Một vài lần tra cứu và bạn đã ở đó!
In [36]: OHOMES_INSTALLED = !where oci.dll
In [37]: OHOMES_INSTALLED
Out[37]:
['C:\\Oracle10\\BIN\\oci.dll',
'C:\\oraclexe\\app\\oracle\\product\\11.2.0\\server\\bin\\oci.dll']
In [38]: ORACLE_HOME = os.path.dirname(OHOMES_INSTALLED[0])
In [39]: ORACLE_HOME
Out[39]: 'C:\\Oracle10\\BIN'
In [40]: f = open(os.path.join(ORACLE_HOME, "oracle.key"))
In [41]: SECTION = f.read()
In [42]: SECTION
Out[42]: 'SOFTWARE\\ORACLE\\KEY_OraClient10204_Home\n'
In [43]: from _winreg import *
In [44]: aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
In [46]: aKey = OpenKey(aReg,SECTION.strip())
In [47]: val = QueryValueEx(aKey, "NLS_LANG")
In [48]: print val
(u'NORWEGIAN_NORWAY.WE8MSWIN1252', 1)