使用Coldfusion 11的CFdirectory,在文件名中出现非ascii字符

时间:2014-11-21 08:19:38

标签: encoding utf-8 coldfusion jvm cfdirectory

我对此有类似的问题: ColdFusion, CFDirectory and the French 没有给出满意的答案。

我们已从Coldfusion 9升级到Coldfusion 11.到目前为止,除以下内容外没有任何重大问题:

当使用CFdirectory显示名称中包含非ASCII字符的文件名时(例如:重音符号,变音符号),我们可以看到带有替换字符的文件名 而不是正确的UTF等效字符。例如,名为L'État,c'est moi.pdf的文件显示为L tat,c estmoi.pdf。

我们相信这是一个Coldfusion问题,因为Coldfusion版本没有任何改变。使用Coldfusion 9 CFdirectory在列出相同的重音文件名时工作正常。我们的操作系统是Redhat 7.0,文件名也可以通过ls命令在终端上正确显示。我还创建了一个快速的PHP脚本,以查看PHP是否可以使用“readdir”命令正确读取目录,并且也没有问题,文件名正确呈现。

所以我认为这必须是Coldfusion 11问题。我在Coldfusion管理员服务器界面的JVM设置中添加了-Dfile.encoding = UTF-8 -Dencoding = UTF-8参数,但没有区别。

任何关于如何纠正这一点的建议都将受到赞赏。

使用的代码示例如下:

<cfdirectory
action="list"
directory="#ExpandPath( './' )#/pdfs"
listinfo="name"
name="qFile"
/>  
<cfdump
var="#qFile#"
label="All Files"
/>

This the output of the cfdump:

4 个答案:

答案 0 :(得分:0)

您是否尝试过设置 cfprocessingdirective 标记?

<cfprocessingdirective pageencoding="utf-8">

CF 11 WikiDocs

此外,在Chrome网络检查器中,请确保正确返回编码。例如:

Content-Type:text/html; charset=UTF-8

答案 1 :(得分:0)

如果您的环境是Linux,则需要使用干净的UTF-8配置。

请查看here

我遇到了同样的问题,我只是将~/.bashrc这些行添加到文件中:

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 
export LANGUAGE=en_US.UTF-8

之后,不要忘记重新启动Coldfusion Server

sudo /opt/coldfusion11/cfusion/bin/coldfusion restart

答案 2 :(得分:0)

请参阅:Why are certain characters not being injected correctly to SQL Server from a CFQUERY?

确保使用Unicode UTF-8编码保存文件。

还要确保您的JVM参数也会处理它。管理员&gt;服务器设置&gt; Java和JVM。将“-Dfile.encoding = UTF-8”添加到参数中。

enter image description here

答案 3 :(得分:0)

我遇到了同样的问题,从而解决了我的错误
/.bashrc LC_ALL =“ de_DE.UTF-8” 在linux上,更改后重新启动Coldfusion应用程序