Print Thread
Arabic letter displaying as ???? in clob column
#52156 09/22/15 05:39 AM
Joined: Sep 2015
Posts: 1
M
mvrkr44 Offline OP
Member
OP Offline
Member
M
Joined: Sep 2015
Posts: 1
when i opened the clob column with decrpyt package...from pl sql developer..i am getting as ????...But same is working in TOAD..
I have changed my NLS_language to Arabic also

Re: Arabic letter displaying as ???? in clob column
mvrkr44 #52159 09/22/15 08:30 AM
Joined: Aug 1999
Posts: 22,221
Member
Offline
Member
Joined: Aug 1999
Posts: 22,221
Can you go to Help > Support Info, press the 'Copy all pages' button on this info screen, and paste this text into an e-mail reply?


Marco Kalter
Allround Automations
Re: Arabic letter displaying as ???? in clob column
Marco Kalter #53022 01/29/16 08:02 AM
Joined: Nov 2015
Posts: 10
H
Member
Offline
Member
H
Joined: Nov 2015
Posts: 10
PL/SQL Developer
Version 11.0.4.1774
01.105053 - 1 user license
Service Contract: 01.01.17
Windows 7 (64-bit) 6.1 Build 7601 (Service Pack 1)

Physical memory : 4.194.304 kB (4.194.304 available)
Paging file : 4.194.304 kB (4.194.304 available)
Virtual memory : 2.097.024 kB (1.749.892 available)

Parameters
D:\Programme\PLSQL_Dev\PLSQLDev.exe

Preferences
Session mode: Multi
OCI Library:
Use OCI7: False
Allow Multiple Connections: True

Preference Files
D:\Programme\PLSQL_Dev\Preferences\Default\Default.ini
C:\Users\hboecker\AppData\Roaming\PLSQL Developer\Preferences\hbocker\default.ini

License File
D:\Programme\PLSQL_Dev\aalf.dat

Debug file
D:\Programme\PLSQL_Dev\PlSqlDev.elf

Plug-Ins
*Active Query Builder (D:\Programme\PLSQL_Dev\PlugIns\ActiveQueryBuilder.dll)
*PL/SQL Documentation (plsqldoc) (D:\Programme\PLSQL_Dev\PlugIns\plsqldoc.dll)
Red Gate Deployment Plug-In (D:\Programme\PLSQL_Dev\PlugIns\RedGate.dll)
*Version Control Interface 1.2 (D:\Programme\PLSQL_Dev\PlugIns\VCS.dll)
(* is Active)

Aliases
DIGITAL_MAILROOM
eondev.opentext.net
EXTPROC_CONNECTION_DATA
SCH_MANNAI_DEV
SCH_MANNAI_DEV_NEU
SCHPRDBPM
SCHTEST
TESTDB
WINDCHIL
XE

Homes
XE (D:\ORACLE_10g\app\oracle\product\10.2.0\server)
XE10G (D:\ORACLE_10g\app\oracle\product\10.2.0\server)
XE11G (D:\ORACLE_11g\app\oracle\product\11.2.0\server)

DLLs
D:\ORACLE_10g\app\oracle\product\10.2.0\server\bin\oci.dll

TNS File
D:\ORACLE_10g\app\oracle\product\10.2.0\server\Network\Admin\tnsnames.ora

Using
Home: XE
DLL: D:\ORACLE_10g\app\oracle\product\10.2.0\server\bin\oci.dll
OCI: Version 10.2
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0

Character Sets
Character size: 1 byte(s)
CharSetID: 560
NCharSetID: 2000
Unicode Support: True
NLS_LANG: GERMAN_GERMANY.WE8MSWIN1252
NLS_CHARACTERSET: AR8MSWIN1256
NLS_NCHAR_CHARACTERSET: AL16UTF16

Monitor
Id = 0
Primary = True
Handle = 65537
Left = 0
Top = 0
Width = 1440
Height = 900

MainFormOnTaskbar = False

Re: Arabic letter displaying as ???? in clob column
HelmutB #53023 01/29/16 08:04 AM
Joined: Nov 2015
Posts: 10
H
Member
Offline
Member
H
Joined: Nov 2015
Posts: 10
It may be caused by the LOCAL windows registry settings being different than what the real DB NLS parameters are.
I will change these and check the impact.

Re: Arabic letter displaying as ???? in clob column
HelmutB #53024 01/29/16 08:28 AM
Joined: Nov 2015
Posts: 10
H
Member
Offline
Member
H
Joined: Nov 2015
Posts: 10
Found this article:

there it is stated:
"The NLS_LANG value should reflect the client operating system code page. For example, in an English Windows environment, the code page is WE8MSWIN1252. When the NLS_LANG parameter is set properly, the database can automatically convert incoming data from the client operating system. When the NLS_LANG parameter is not set properly, then the data coming into the database is not converted properly. "

Accordingly, in my english windows environment the NLS_LANG parameter value "GERMAN_GERMANY.WE8MSWIN1252" should be "AMERICAN_AMERICA.WE8MSWIN1252" in order to perform the right data conversion. Will reboot and see the result.

Re: Arabic letter displaying as ???? in clob column
HelmutB #53025 01/29/16 08:39 AM
Joined: Nov 2015
Posts: 10
H
Member
Offline
Member
H
Joined: Nov 2015
Posts: 10
Changes in registry are applied and system rebooted.
Still get ???? for arabic values.

SOFTWARE\ORACLE

SOFTWARE\ORACLE\KEY_XE
VERSION = 10.2
ORACLE_HOME_NAME = XE
ORAMTS_CP_TRACE_LEVEL = 0
ORACLE_SID = XE
ORACLE_HOME_KEY = SOFTWARE\ORACLE\KEY_XE
ORACLE_BASE = D:\ORACLE_10g\app\oracle
StmtCacheSize = 0
ORACLE_HOME = D:\ORACLE_10g\app\oracle\product\10.2.0\server
ORAMTS_CP_TRACE_DIR = D:\ORACLE_10g\app\oracle\product\10.2.0\server\oramts\trace
NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
StatementCacheSize = 0
OLEDB = D:\ORACLE_10g\app\oracle\product\10.2.0\server\oledb\mesg
ORA_XE_AUTOSTART = TRUE
ORA_XE_SHUTDOWN = TRUE
ORA_XE_SHUTDOWNTYPE = immediate
ORA_XE_SHUTDOWN_TIMEOUT = 90

SOFTWARE\ORACLE\KEY_XE\ODE
.NETFramework =
TraceLevel = 0
TraceFileName = C:\ODE.trc
TraceOption = 0

SOFTWARE\ORACLE\KEY_XE\OLEDB
StmtCacheSize = 0
DisableRetClause = 1
TraceFileName = c:\OraOLEDB.trc
EnableCmdTimeout = 0
ChunkSize = 100
TraceCategory = 0
MetaDataCacheSize = 0
PLSQLRset = 0
DBNotifications = 0
UserDefFn = 0
FetchSize = 100
OSAuthent = 0
DistribTX = 1
TraceLevel = 0
CacheType = Memory
SchRstLng = 10000
TraceOption = 0
VCharNull = 1
DeferUpdChk = 0
PwdChgDlg = 1
SPPrmDefVal = 0

SOFTWARE\ORACLE\KEY_XE10G
VERSION = 10.2
ORACLE_HOME_NAME = XE10G
ORAMTS_CP_TRACE_LEVEL = 0
ORACLE_SID = XE10G
ORACLE_HOME_KEY = SOFTWARE\ORACLE\KEY_XE10G
ORACLE_BASE = D:\ORACLE_10g\app\oracle
StmtCacheSize = 0
ORACLE_HOME = D:\ORACLE_10g\app\oracle\product\10.2.0\server
ORAMTS_CP_TRACE_DIR = D:\ORACLE_10g\app\oracle\product\10.2.0\server\oramts\trace
NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
StatementCacheSize = 0
OLEDB = D:\ORACLE_10g\app\oracle\product\10.2.0\server\oledb\mesg
ORA_XE_AUTOSTART = TRUE
ORA_XE_SHUTDOWN = TRUE
ORA_XE_SHUTDOWNTYPE = immediate
ORA_XE_SHUTDOWN_TIMEOUT = 90

SOFTWARE\ORACLE\KEY_XE10G\ODE
.NETFramework =
TraceLevel = 0
TraceFileName = C:\ODE_XE10G.trc
TraceOption = 0

SOFTWARE\ORACLE\KEY_XE10G\OLEDB
StmtCacheSize = 0
DisableRetClause = 1
TraceFileName = c:\OraOLEDB_XE10G.trc
EnableCmdTimeout = 0
ChunkSize = 100
TraceCategory = 0
MetaDataCacheSize = 0
PLSQLRset = 0
DBNotifications = 0
UserDefFn = 0
FetchSize = 100
OSAuthent = 0
DistribTX = 1
TraceLevel = 0
CacheType = Memory
SchRstLng = 10000
TraceOption = 0
VCharNull = 1
DeferUpdChk = 0
PwdChgDlg = 1
SPPrmDefVal = 0

SOFTWARE\ORACLE\KEY_XE11G
VERSION = 11.2
ORACLE_HOME_NAME = XE11G
ORAMTS_CP_TRACE_LEVEL = 0
ORACLE_SID = XE11G
ORACLE_HOME_KEY = SOFTWARE\ORACLE\KEY_XE11G
ORACLE_BASE = D:\ORACLE_11g\app\oracle
StmtCacheSize = 0
ORACLE_HOME = D:\ORACLE_11g\app\oracle\product\11.2.0\server
ORAMTS_CP_TRACE_DIR = D:\ORACLE_11g\app\oracle\product\11.2.0\server\oramts\trace
NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
StatementCacheSize = 0
OLEDB = D:\ORACLE_11g\app\oracle\product\11.2.0\server\oledb\mesg
ORA_XE_AUTOSTART = TRUE
ORA_XE_SHUTDOWN = TRUE
ORA_XE_SHUTDOWNTYPE = immediate
ORA_XE_SHUTDOWN_TIMEOUT = 90

SOFTWARE\ORACLE\KEY_XE11G\ODE
.NETFramework =
TraceLevel = 0
TraceFileName = C:\ODE_XE11G.trc
TraceOption = 0

SOFTWARE\ORACLE\KEY_XE11G\OLEDB
StmtCacheSize = 0
DisableRetClause = 1
TraceFileName = c:\OraOLEDB_XE11G.trc
EnableCmdTimeout = 0
ChunkSize = 100
TraceCategory = 0
MetaDataCacheSize = 0
PLSQLRset = 0
DBNotifications = 0
UserDefFn = 0
FetchSize = 100
OSAuthent = 0
DistribTX = 1
TraceLevel = 0
CacheType = Memory
SchRstLng = 10000
TraceOption = 0
VCharNull = 1
DeferUpdChk = 0
PwdChgDlg = 1
SPPrmDefVal = 0

SOFTWARE\ORACLE\ODP.NET

SOFTWARE\ORACLE\ODP.NET\2.112.2.0
DllPath = D:\ORACLE_11g\app\oracle\product\11.2.0\server\bin
TraceFileName = C:\odpnet2.trc
TraceOption = 0
PromotableTransaction = promotable
StatementCacheWithUdts = 1
DemandOraclePermission = 0
TraceLevel = 0
UdtCacheSize = 4096
PerformanceCounters = 0
MaxStatementCacheSize = 100
SelfTuning = 1

SOFTWARE\ORACLE\ODP.NET\4.112.2.0
UdtCacheSize = 4096
SelfTuning = 1
DllPath = D:\ORACLE_11g\app\oracle\product\11.2.0\server\bin
TraceOption = 0
MaxStatementCacheSize = 100
PromotableTransaction = promotable
DemandOraclePermission = 0
TraceFileName = C:\odpnet4.trc
TraceLevel = 0
PerformanceCounters = 0
StatementCacheWithUdts = 1

SOFTWARE\ORACLE\OracleMTSRecoveryService

SOFTWARE\ORACLE\OracleMTSRecoveryService\Protid_0
Name = HTTP
Host = cde1106.vanenburg.com
Port = 2030

SOFTWARE\ORACLE\OracleMTSRecoveryService\Setup
NumberOfInstalls = 1

Can someone help to get this fixed?

Thanks + regards
helmut

Re: Arabic letter displaying as ???? in clob column
HelmutB #53026 01/29/16 08:46 AM
Joined: Nov 2015
Posts: 10
H
Member
Offline
Member
H
Joined: Nov 2015
Posts: 10
It may be of interest that I get arabic text in PL/SQL Developer correctly when I have pasted it in the column using PL/SQL Developer then commit and then reading the table data again. But other lines still show "????" values.
When using other multi-byte clients ALL values are correctly in arabic, not only the ones that I have changed.

Re: Arabic letter displaying as ???? in clob column
HelmutB #53027 01/29/16 08:56 AM
Joined: Nov 2015
Posts: 10
H
Member
Offline
Member
H
Joined: Nov 2015
Posts: 10
Setting NLS_LANG = AMERICAN_AMERICA.AL32UTF8 does fix this issue.

Re: Arabic letter displaying as ???? in clob column
HelmutB #53049 02/02/16 10:51 AM
Joined: Sep 2009
Posts: 197
Krakow, Poland
Member
Offline
Member
Joined: Sep 2009
Posts: 197
Krakow, Poland
That's actually not entirely true. The NLS_LANG specifies how (and if) will the Oracle Client re-code the VARCHAR2 values for the application that is using the Oracle Client. There's a silent (and sometimes incorrect) assumption, that the application is using the same encoding, as the underlying OS does, hence this explanation. As an application is actually free to use any encoding it wants, and on most modern Windows platforms, modern applications actually use Unicode (and the multibyte encoding system setting in Windows is only to be backward-compatible with older apps), so the NLS_LANG specifying something else then an Unicode based encoding may cause more problems than solutions.

On the other side, using something else than the "system" encoding (the multibyte one) may be an issue, if an application developer actually took that instruction literally and expect that the Oracle Client will provide data encoded in that multibyte encoding (and the application re-codes it to Unicode).

As far, as I know, the PL/SQL Developer (PLD) actually checks what is the encoding set for Oracle Client and re-codes that to Unicode (at least when the Unicode support is turned on in PLD preferences), so everything that Oracle Client provides should be displayed properly.

Your issue comes from the fact that the Arabic characters can't be properly represented using the Windows-1252 code-page as they are outside of the range of its charset. This means that the Oracle Client will replace those characters with "?" when re-coding it for PLD and PLD will show those.
As you have already seen, specifying Unicode-based encoding for PLD (you can do this in "params.ini" file of PLD, instead of environment variables, not to influence other apps) should allow you to work with most DB character sets (except those, that do not fit into UCS-2 range, which is at the base of Windows API).

If you are wondering why some other applications were able to display the Arabic characters even when NLS_LANG was set to Windows-1252, then the answer is probably simple: they did override that setting with Unicode based encoding, prior to accessing Oracle Client.


Moderated by  support 

Link Copied to Clipboard
Powered by UBB.threads™ PHP Forum Software 7.7.4
(Release build 20200307)
Responsive Width:

PHP: 7.1.33 Page Time: 0.034s Queries: 14 (0.010s) Memory: 2.5559 MB (Peak: 3.0405 MB) Data Comp: Off Server Time: 2024-05-21 09:50:21 UTC
Valid HTML 5 and Valid CSS