2014-12-03 2 views
2

На одном из наших серверов ColdFusion 10 Enterprise/CentOS 6.5 umlauts в именах файлов сохраняются как ?.Umlauts в именах файлов усекаются (отображаются как вопросительные знаки)

Например:

<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é». Ручное создание файлов с umlauts в имени файла не является проблемой (например, 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

ли имя файла * действительно * жестко закодированы в исходном коде, как это, или это просто пример? Если он находится в файле, вам понадобится ' 'в верхней части файла. –

+0

Это просто пример кода.' 'does не устраняйте проблему. UMLauts по-прежнему '?'. – Seybsen

+0

Нет, директиву обработки применимо только в том случае, если оно указано в коде. Что я сказал. Если вы выдаете значения на экране, они хорошо сформированы? –

ответ

1

Я объясню это как ответ для более четкой видимости.

Пользователь Open Blue Dragon (альтернативный двигатель CFML) имел точно такую ​​же проблему.

При попытке загрузить файл с помощью, например, имя файла «testätest.pdf», то у меня следующая ситуация:

  • Файл, магазины OpenBD в моей файловой системе, называется : тест test.pdf
  • Имя файла, сообщающийся через # cffile.ServerFile # является: testätest.pdf

позже он вернулся с этим ответом

Похоже, что это было разрешено установкой «LC_ALL = en_US.UTF-8». Кажется, что проблема с tomcat заключается в том, что он задает знаки вопроса для специальных символов, если кодировка неизвестна.

Или, в случае с ОП, установить LC_All на "de_DE.UTF-8" возможно.

Источник:Issue 516: Special characters (like german "Umlauts") in filenames of uploaded files are replaced with "?"

+0

То же решение, что и в [упомянутой выше теме] (http://stackoverflow.com/questions/27276362/umlauts-in-filenames-are-truncated-are-shown-as-question-marks#comment43023111_27276362). Но сохраняющийся вопрос заключался в том, чтобы [* how * добавить этот параметр в пользовательскую реализацию Tomcat CF) (http://stackoverflow.com/questions/27056883/cfdirectory-with-coldfusion-11-issue-with-non-ascii-characters- в-имена файлов # comment42642317_27056883). (Я не знаю). Любые идеи для другого парня? – Leigh

+0

К сожалению, я тоже. –

+0

Ничего себе, это сделал трюк. Благодаря! – Seybsen

Смежные вопросы