ColdFusion 11中的CF目录,文件名中的非ASCII字符问题

3

我有一个类似的问题:

ColdFusion, CFDirectory and the French

但是没有得到令人满意的答案。

我们已经从Coldfusion 9升级到Coldfusion 11,目前除了以下问题外,没有遇到任何大问题:

使用CFdirectory显示文件名时,如果文件名中包含非ASCII字符(例如:重音符号、umlauts),则会看到替换字符�而不是正确的UTF等效字符。例如,名为L’État,c’est moi.pdf的文件会显示为L�����tat,c���est moi.pdf。

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

我相信这一定是Coldfusion 11的问题。我已经在Coldfusion管理员服务器界面中添加了-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:


抱歉,Adam,英语不是我的母语,也许我表达得不够清楚。我是指我们使用CFdirectory列出所选目录中的文件名。我已在我的问题中添加了相关代码。这次我希望我能表达清楚 :-) - user1201723
你在更改参数后重新启动了CF吗? - Mark A Kruger
1
等一下 - 你的问题可能与CFDUMP有关。使用正确的显示编码设置页面,然后使用cfoutput输出文件。那些问号只是表示超出边界的ASCII字符,对吧? - Mark A Kruger
@Mark A Kruger 是的,我已经重新启动了CF并使用了cfoutput,但没有改变。我已经缩小了问题范围,发现问题与tomcat(CF11使用)有关。 有人在railo上遇到了同样的问题,并通过更改tomcat的setenv.sh设置文件来解决了这个问题。 请参见:https://issues.jboss.org/browse/RAILO-3090。 在我的情况下,我没有使用Railo,而CF似乎使用自定义的tomcat实现,我无法修改其任何设置,或者至少不清楚/记录如何为CF 11 / tomcat实例执行此操作。 - user1201723
抱歉回复晚了,@user1201723。我在Windows上尝试了你的代码,并没有出现任何问题。我没有Linux可用于测试,所以不确定我能在这里提供更多帮助。 :-( - Adam Cameron
显示剩余3条评论
4个回答

1

你尝试过设置 cfprocessingdirective 标签吗?

<cfprocessingdirective pageencoding="utf-8">

CF 11 WikiDocs

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

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

是的,我已经尝试过了,没有任何区别。编码返回为utf-8,无论是否使用<cfprocessingdirective pageencoding="utf-8">。 - user1201723
2
<cfprocessingdirective> 只是告诉 CF 如何编译源代码文件,与数据处理或输出无关。阅读:http://blog.adamcameron.me/2013/10/cfcamp-and-how-not-to-use-it.html - Adam Cameron
@SlickRick 我已经添加了相关的代码和 cfdump 输出的截图。 - user1201723
我仍然无法在我的系统上复制您的结果。为了进行健全性检查,您能否运行此代码并检查其输出。<cfset stm = createObject(“java”,“java.lang.System”)/> <cfoutput>#stm.getProperty(“sun.jnu.encoding”)#</cfoutput> - BuzzCloudAU
1
顺便提一下,我也尝试了 CFdirectory 的替代方法来列出文件,这是我在这里找到的 CFdirectory 的 JAVA 版本:http://www.anujgakhar.com/2007/11/06/java-version-of-cfdirectory/。不幸的是,替换字符的错误仍然存在 :-( - user1201723
显示剩余4条评论

0

如果您的环境是Linux,您需要有一个干净的UTF-8配置。

请看这里

我曾经遇到过同样的问题,我只需在文件~/.bashrc中添加以下代码:

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

之后,别忘了重新启动你的Coldfusion服务器

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

我们的Linux区域设置一直像您发布的示例那样。当安装Coldfusion 9时,没有文件名显示问题。问题出现在我们升级到Coldfusion 11之后。因此,至少在我们的情况下,这不是Linux区域设置错误的问题。 - user1201723

0

在我的问题中,我已经提到了“-Dfile.encoding=UTF-8 -Dencoding=UTF-8”参数包含在JAVA和JVM设置中。这些文件是Unicode UTF-8编码的。无论如何,问题不在于文件内容,因为它们可以正常显示,而是文件名在CFDIRECTORY中无法正确显示,这已经解释过了。 - user1201723
抱歉,我错过了那些评论。不幸的是,我无法重现这个问题... cfdir 和 cfdump 正确地显示了文件名 L’État, c’est moi.pdf - Jules

0

我曾经遇到过同样的问题,这解决了我的错误
/.bashrc LC_ALL="de_DE.UTF-8" 在Linux上更改后,重新启动ColdFusion应用程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接