使用ColdFusion从AS / 400服务器显示中文字符

时间:2017-05-15 19:17:32

标签: coldfusion odbc ibm-midrange cfquery

我正在编写一个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;我对这些设置不够熟悉,不知道需要改变哪些才能使其正常工作。

2 个答案:

答案 0 :(得分:4)

在评论中找到并讨论了一种解决方法。在此处添加一些详细信息,作为此页面未来访问者的答案。

处理Unicode(中文)字符时需要考虑几个因素:

  • 数据库表的数据类型必须设置为nvarchar
  • 表单处理脚本(CFML)必须设置为utf-8
    • 我认为ColdFusion默认为此,但您可以指定设置以确保。
      例如:<cfprocessingDirective pageEncoding=”utf-8″>
  • 启用&#34;字符串格式&#34;在ColdFusion数据源设置中
    • 在ColdFusion管理员数据源设置下,选择您正在使用的相应数据源。然后点击&#34;显示高级设置&#34;按钮。这将显示&#34;字符串格式&#34; 为配置为非拉丁字符的数据源启用高位ASCII字符和Unicode 。选择此选项并保存数据源。

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,但如果由于某种原因,它将强制使用正确的字符集。

相关问题