文件名中的变音符号被截断(显示为问号)

时间:2014-12-03 16:07:25

标签: utf-8 coldfusion coldfusion-10

在我们的ColdFusion 10企业/ CentOS 6.5服务器上,文件名中的元音变音保存为?

例如:

<CFPROCESSINGDIRECTIVE pageencoding="UTF-8">
<CFSET VARIABLES.umlauts = "ümläüté" />
<CFSET VARIABLES.filename = createUUID() & "-" & VARIABLES.umlauts & ".txt" />
<CFFILE action="write" output="#VARIABLES.umlauts#" file="#expandpath("./" & VARIABLES.filename)#" />
<CFOUTPUT>#VARIABLES.filename#</CFOUTPUT> <!--- outputs something like: A9C9BC8C-983A-5EA6-A4ED411BA0E63C72-ümläüté.txt --->

将名为A8B49720-020A-2500-605F4CC73129D07C-?ml??t?.txt的文件写入磁盘。该文件的内容就像预期的“ümläüté”。 使用文件名中的变音符号手动创建文件是没有问题的(例如touch äöüß.txt就像预期的那样工作)。

服务器的更多细节:
Java版本:1.6.0_29
Tomcat版本:7.0.23.0
Java文件编码:UTF8

$ cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"

$ locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

任何可能导致此行为的想法?

1 个答案:

答案 0 :(得分:1)

我会把它作为更清晰可见性的答案。

Open Blue Dragon(替代CFML引擎)的用户遇到了完全相同的问题。

  

如果我尝试上传文件,例如文件名“testätest.pdf”,那么我有以下情况:

     
      
  • OpenBD存储到我的文件系统的文件命名为:test?test.pdf
  •   
  • 通过#cffile.ServerFile#报告的文件名是:testätest.pdf
  •   

他后来回来了这个答案

  

似乎已通过设置“LC_ALL = en_US.UTF-8”解决了这个问题。如果字符集未知,它似乎是一个tomcat问题,它为特殊字符设置问号。

或者,在OP的情况下,或许将LC_All设置为"de_DE.UTF-8"

来源: Issue 516: Special characters (like german "Umlauts") in filenames of uploaded files are replaced with "?"