我正在编写一个ColdFusion程序,它使用cfquery
从AS / 400 iSeries表中获取数据,然后将该数据输出到网页。有时数据是中文的,但它没有正确输出汉字。
我构建了下面的查询以进行测试,
<cfprocessingdirective pageEncoding="UTF-8" />
<cfquery name="Test" Datasource = "AS400">
select dsc1 from sales where ref = '123456'
</cfquery>
<cfoutput>#test.dsc1#</cfoutput>
结果应该是&#34; M5方头螺栓&#34;但我只能得到&#34; M5&#34;。我做了另一个测试:
<cfset x = "M5方头螺栓"/>
<cfoutput>#x#</cfoutput>
它显示中文没问题。
由于ColdFusion可以在代码中写出字符时显示字符,但是当它通过SQL获取数据时,似乎问题出在我的ODBC设置或我的ColdFusion服务器数据源设置上,但我和#39;我对这些设置不够熟悉,不知道需要改变哪些才能使其正常工作。
答案 0 :(得分:4)
在评论中找到并讨论了一种解决方法。在此处添加一些详细信息,作为此页面未来访问者的答案。
处理Unicode(中文)字符时需要考虑几个因素:
nvarchar
utf-8
<cfprocessingDirective pageEncoding=”utf-8″>
OP的问题在于他们使用的是ODBC数据源和&#34;字符串格式&#34;选项不可用。经过一些研究,并且没有找到任何方法为该设置配置ODBC数据源,我建议尝试使用内置的JDBC驱动程序来实现&#34; DB2 Universal Database&#34;随ColdFusion一起提供。切换到该驱动程序解决了OP的这个问题。
来自评论
好消息。虽然是&#34;启用字符串格式...&#34;在CF10 +中添加对cf_sql_nvarchar的支持是必要的吗? - @Leigh
我确信Leigh是正确的,因为较新版本的ColdFusion(10及更高版本)对nvarchar字段有更好的支持。
另外需要注意的是,看起来一些旧版本的ColdFusion并不总是与已安装的DB2通用驱动程序一起使用,并且它看起来不像旧的标准版本甚至拥有它,我和#39;我不确定新的是否有它,但使用&#34;其他&#34;使用jt400.jar的选项也应该有效。 - @MHall
答案 1 :(得分:1)
您已经证明CF可以正确输出UTF-8字符。您是否尝试在数据库控制台或UI中运行该查询?你得到了正确的特征吗?
如果字符存储为VARCHAR而不是NVARCHAR,那么您无能为力。数据必须首先正确存储。
如果字符在数据库中正确存储,请尝试在请求顶部添加<cfprocessingdirective pageEncoding="utf-8">
。 CF应该通过defualt使用UTF-8
,但如果由于某种原因,它将强制使用正确的字符集。