我对远程数据库进行了简单的查询。我查询的表包含VARCHAR2的所有字段。但是,某些字段返回“?”用º,£等字符。我检查了enconding并得到:
response = result.json()
检查我的/ etc / default / locale文件。结果如下:
NLS_CHARACTERSET: AL32UTF8
NLS_NCHAR_CHARACTERSET:AL16UTF16
两边的加入都是UTF-8。还有其他配置我错过了吗?
答案 0 :(得分:1)
当你说“某些字段返回"?"在像......这样的人物中我猜你的屏幕上会显示,对吧?你不知道什么是真正的回归,你只知道屏幕上的内容。
要查看REALLY返回的内容,您可以执行类似
的操作select dump('£500') from dual;
DUMP('£500')
--------------------------
Typ=96 Len=4: 163,53,48,48
编辑:正如下面的评论中所讨论的那样,如果您在终端上输入了这个命令,并且实际上确实存在显示问题,那么您将看到垃圾邮件。 ,要查看存储在数据库中的内容,必须引用实际的表以及包含这些字符串值的列。例如,如果列名称是表TBL中的COL1,并且还有一个ID列,并且对于ID = 1000,您有一个COL1值,其中包含井号,运行
select dump(COL1) from TBL where ID = 1000;
显然,INPUT没有问题,因为输入中不再有井号(就像我的第一个例子那样)。但在出路时,DUMP可能会显示正确的字符 - 但是您的显示器无法正确显示。
结束编辑
如果您在DUMP中看到代码163,则表示井号已正确存储在数据库中,问题就在于它在屏幕上的显示方式。在这种情况下,您的NLS_LANG设置可能存在问题。这里有很好的信息:
http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html
如果您发现必须经常使用不同的字符集,那么您可能会仔细阅读本文。它将向您展示如何找出您当前的字符集是什么,如何更改它,以及为什么"显而易见的"人们会看到的事实上并不是很有帮助。问题不是太复杂,也不是微不足道。