2017-05-15 14 views
3

我正在编写一个ColdFusion程序,它使用cfquery从AS/400 iSeries表中获取数据,然后将该数据输出到网页。有时候数据是中文的,但不会正确输出中文字符。使用ColdFusion从AS/400服务器显示中文字符

我建下面的测试查询,

<cfprocessingdirective pageEncoding="UTF-8" /> 
    <cfquery name="Test" Datasource = "AS400"> 
     select dsc1 from sales where ref = '123456' 
    </cfquery> 

<cfoutput>#test.dsc1#</cfoutput> 

结果应该是 “M5方头螺栓”,但我只得到 “M5”。我做了另一个测试运行刚:

<cfset x = "M5方头螺栓"/> 
<cfoutput>#x#</cfoutput> 

,并显示中国没有问题。

由于ColdFusion可以在代码中写出字符时显示字符,但不能在通过SQL获取数据时显示字符,这似乎是问题出在我的ODBC设置或我的ColdFusion服务器数据源设置上,但我对这些设置不够熟悉,不知道需要更改哪些内容才能实现此功能。

+1

在ColdFusion管理员数据源设置下,选择您正在使用的相应数据源。然后点击“显示高级设置”按钮。这将显示一个选项“字符串格式”_启用高级ASCII字符和Unicode配置为非拉丁字符配置的数据源_。选中该数据源的框。正如Adrian指出的,数据必须存储在数据库的NVARCHAR字段中。 –

+0

我正在使用Coldfusion 2016,我检查了我正在使用的数据源的高级设置,并且没有显示“字符串格式”或任何提及启用高字符的ASCII字符和用于非拉丁字符配置的数据源的Unicode选项的选项。 有一个选项显示: CLOB - 启用长文本检索(CLOB)。 BLOB - 启用二进制大对象检索(BLOB)。 我测试了这两个但都没有差异。 我的数据源未设置为受信任的来源,这是否会有所作为? – MHall

+0

啊对,ODBC数据源没有这个选项。查看是否可以使用正在使用的ODBC驱动程序配置该设置。 –

回答

1

您已经证明CF可以正确输出UTF-8字符。您是否曾尝试在数据库控制台或用户界面中运行该查询?你有正确的字符吗?

如果字符存储为VARCHAR而不是NVARCHAR,那么就没有办法。数据必须首先妥善保存。

如果字符在DB中正确存储,请尝试在请求顶部添加<cfprocessingdirective pageEncoding="utf-8">。 CF应该使用UTF-8,但如果出于某种原因,它会强制正确的字符集。

+0

数据在NVARCHAR中。 我已经在Debug中测试过,而且我得到了M5。 在我的代码我有: 我删除了/和没有区别。 我是新来的,不知道如何让我的代码看起来漂亮,当它的评论,抱歉的任何不便。 – MHall

+0

@Mall - 对于评论,请使用[back ticks](https://en.wikipedia.org/wiki/Grave_accent):-) – Leigh

4

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

有一对夫妇时,使用Unicode(中国)文字处理方面的考虑:

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

为OP的问题是,他们使用的ODBC数据源和“字符串格式”选项不可用。经过一番研究并找不到任何方式为该设置​​配置ODBC数据源之后,我建议尝试使用ColdFusion附带的“DB2通用数据库”的内置JDBC驱动程序。切换到该驱动程序解决了OP的这个问题。

从评论

良好的信息。尽管在CF10 +中增加了对cf_sql_nvarchar的支持,但是“Enable String Format ...”是必需的吗? - @Leigh

我相信Leigh是正确的,新版本的ColdFusion(10及更高版本)对nvarchar字段有更好的支持。

另外需要注意的是,它看起来像一些旧版本的ColdFusion并不总是与已安装的DB2通用驱动程序一起工作,它看起来不像旧版本的标准版本,即使有它,我不知道是否新的也有它,但在jt400.jar中使用“other”选项也可以。 - @MHall

+0

良好的信息。尽管在CF10 +中增加了对cf_sql_nvarchar的支持,但是“Enable String Format ...”是必需的吗? – Leigh

+0

还要注意,它看起来像一些旧版本的ColdFusion并不总是与已安装的DB2通用驱动程序一起工作,它看起来不像旧版本的标准版本,即使它有,我不确定新版本是否也有它,但在jt400.jar中使用“other”选项也应该有效。 – MHall

+0

好点的家伙。我会将它们添加到答案中,以便人们看到它们。 –