在我们的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=
任何可能导致此行为的想法?
答案 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"
。