Преобразование символов ascii обратно в уни-код в Coldfusion - PullRequest
2 голосов
/ 27 марта 2012

У меня есть база данных (postgres), которая не может принимать символы Unicode, но они вводятся как Unicode из Coldfusion. Я конвертирую их в ascii, как показано здесь, и сохраняю их в базе данных. Это прекрасно работает, и вот код, который я использую для преобразования чьего-либо имени (содержащего китайские / корейские символы и т. Д.) В ascii.

<cfset strLen = len(#URL.firstName#)>
<cfset tempCharAll = 'START_TAG'>
<cfloop from="1" to="#strLen#" index="i">
<cfset current_char = mid(#URL.firstName#,i,1)>
<cfset tempChar =  formatBaseN(asc(current_char),16)>
<cfset tempCharAll = tempCharAll & tempChar >
</cfloop>
<cfset #URL.lastName# = #tempCharAll#>
<cfset #URL.firstName# = #tempCharAll#>

Теперь, как мне изменить это и заставить coldfusion преобразовать что-то обратно в юникод, чтобы при входе в систему и т.д. отображались правильные корейские / китайские символы? Спасибо.

Этот код не работает:

Если я использую этот код:

<CFOUTPUT> input:</br></br></CFOUTPUT> 
<cfset tempChar =  "t">
<CFOUTPUT> #tempChar#</br></br></CFOUTPUT>
<cfset tempChar =  formatBaseN(asc(current_char),16)>
<CFOUTPUT> encoded:</br></br></CFOUTPUT> 
<CFOUTPUT> #tempChar#</br></br></CFOUTPUT>
<cfset varCoded = CharsetDecode(tempChar, "windows-1252")>
<cfset strUnEncoded = CharsetEncode(varCoded, "utf-8")> 
<CFOUTPUT> decoded:</br></br></CFOUTPUT> 
<CFOUTPUT> #strUnEncoded#</br></br></CFOUTPUT> 

Затем он выводит 74 для декодирования и кодирования, когда он должен вывести «t» для декодирования

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Я вообще не эксперт по кодированию, но я вижу, что вы форматируете в базу N, но не декодируете из базы N. Вам также нужно получить символ с помощью chr () в последней строке

<CFOUTPUT> input:</br></br></CFOUTPUT> 
<cfset tempChar =  "t">
<CFOUTPUT> #tempChar#</br></br></CFOUTPUT>
<cfset tempChar =  formatBaseN(asc(tempChar),16)>
<CFOUTPUT> encoded:</br></br></CFOUTPUT> 
<CFOUTPUT> #tempChar#</br></br></CFOUTPUT>
<cfset varCoded = CharsetDecode(tempChar, "windows-1252")>
<cfset strUnEncoded = InputBaseN(CharsetEncode(varCoded, "utf-8"),16)> 
<CFOUTPUT> decoded:</br></br></CFOUTPUT> 
<CFOUTPUT> #chr(strUnEncoded)#</br></br></CFOUTPUT> 

Кажется, что это можно упростить до следующего, но, как я уже сказал, я не настолько похож на кодировку символов

<CFOUTPUT> input:</br></br></CFOUTPUT> 
<cfset tempChar =  "t">
<CFOUTPUT> #tempChar#</br></br></CFOUTPUT>
<cfset strUnEncoded =  asc(tempChar)>
<CFOUTPUT> decoded:</br></br></CFOUTPUT> 
<CFOUTPUT> #chr(strUnEncoded)#</br></br></CFOUTPUT> 
0 голосов
/ 06 мая 2014

Обновите этот ответ для CF10 / Railo4.x - появилась новая функция Canonicalize () , которая хорошо преобразует символы ascii в UTF-8 для вывода.

Пример использования:

#Canonicalize('h\u00E9',1,1)#

Вы также можете использовать его в CF8 и 9, как описано здесь

0 голосов
/ 27 марта 2012

Попробуйте:

<cfset varCoded = CharsetDecode(yourString.stringColumn, "windows-1252")>
<cfset strUnEncoded = CharsetEncode(varCoded, "utf-8")>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...