【问题标题】:CFdirectory with Coldfusion 11, issue with non ascii characters in filenamesColdfusion 11 的 CF 目录,文件名中出现非 ascii 字符的问题
【发布时间】:2015-01-19 08:01:51
【问题描述】:

我有一个类似的问题: ColdFusion, CFDirectory and the French 没有得到满意的答复。

我们已经从 Coldfusion 9 升级到了 Coldfusion 11。到目前为止,除了以下问题没有大问题:

当使用 CFdirectory 显示名称中包含非 ASCII 字符的文件名(例如:重音符号、变音符号)时,我们会看到带有替换字符的文件名 - 而不是正确的 UTF 等效字符。例如,名为 L’État, c’est moi.pdf 的文件显示为 L�����tat, c���est moi.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"
/>

【问题讨论】:

  • 我非常想知道您是如何“使用 CFdirectory 显示文件”的。你有没有机会向我们提供一些代码来证明你在做什么? (阅读:blog.adamcameron.me/2013/09/…
  • 对不起亚当,因为英语不是我的第一语言,也许我没有正确表达自己。我的意思是我们使用 CFdirectory 列出所选目录的文件名。我在我的问题中添加了相关代码。我希望这次我清楚了:-)
  • 是的,干杯。我刚才很忙,但如果没有其他人先回复你,我会看看@this@lunchtime(大约 3 小时时间)。
  • 您在更改 arg 后是否重新启动了 CF?
  • 等待 - 您的问题可能与 CFDUMP 有关。使用正确的显示编码设置您的页面,然后使用 cfoutput 输出文件。那些问号只是表示超出范围的 ascii 字符,对吗?

标签: encoding utf-8 coldfusion jvm cfdirectory


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    确保您的文件以 Unicode UTF-8 编码保存。

    还要确保你的 JVM 参数也能处理它。管理员 > 服务器设置 > Java 和 JVM。在参数中添加“-Dfile.encoding=UTF-8”。

    【讨论】:

    • 在我的问题中,我已经提到“-Dfile.encoding=UTF-8 -Dencoding=UTF-8”参数包含在 JAVA 和 JVM 设置中。这些文件采用 Unicode UTF-8 编码。在任何情况下,问题不在于显示正常的文件内容,而在于 CFDIRECTORY 未正确显示的文件名,如前所述。
    • 对不起,我错过了那些 cmets。不幸的是,我无法重现该问题... cfdir 和 cfdump 正确显示文件名L’État, c’est moi.pdf
    【解决方案3】:

    如果你的环境是 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 服务器

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

    【讨论】:

    • 我们的 Linux 语言环境配置一直与您发布的示例类似。安装 Coldfusion 9 时,没有文件名显示问题。这个问题是在我们升级到 Coldfusion 11 之后开始的。因此,至少在我们的例子中,这不是 Linux 语言环境配置错误的问题。
    【解决方案4】:

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

    <cfprocessingdirective pageencoding="utf-8">
    

    CF 11 WikiDocs

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

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

    【讨论】:

    • 是的,我试过了,没有区别。编码以 utf-8 形式返回,带或不带
    • &lt;cfprocessingdirective&gt; 只是告诉CF如何编译源代码文件。它与数据处理或输出无关。阅读:blog.adamcameron.me/2013/10/cfcamp-and-how-not-to-use-it.html
    • 我已经在 OSX 10.10.1 上的 CF11 中运行了它,我可以循环/输出您的示例文件名,如果我转储 cfdirectory 结果,该名称也会显示。你能用一些示例代码更新你的问题吗?
    • @SlickRick 我已经添加了相关代码和cfdump输出的截图。
    • 顺便说一句,我还尝试了 CFdirectory 的替代方法来列出文件,这是我在这里找到的 CFdirectory 的 JAVA 版本:anujgakhar.com/2007/11/06/java-version-of-cfdirectory。不幸的是,替换字符的错误仍然存​​在:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2014-08-15
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多