Database 在Coldfusion中将ascii字符转换回uni代码

Database 在Coldfusion中将ascii字符转换回uni代码,database,coldfusion,Database,Coldfusion,我有一个不能接受unicode字符的(postgres)数据库,但它们是从coldfusion以unicode输入的。我将它们转换为ascii,如图所示,并将它们存储在数据库中。这很好,下面是我用来将某人的名字(包含中文/韩文字符等)转换为ascii的代码 <cfset strLen = len(#URL.firstName#)> <cfset tempCharAll = 'START_TAG'> <cfloop from="1" to="#strLen#" ind

我有一个不能接受unicode字符的(postgres)数据库,但它们是从coldfusion以unicode输入的。我将它们转换为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将某些内容转换回unicode,以便在某些登录时显示正确的韩语/汉语字符等? 谢谢

此代码不起作用:

如果我使用此代码:

<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> 
输入:

#坦帕查#

编码:

#坦帕查#

已解码:

#strUnEncoded#

然后,当它应该为解码输出“t”时,它为解码和编码输出74

<cfset varCoded = CharsetDecode(yourString.stringColumn, "windows-1252")>
<cfset strUnEncoded = CharsetEncode(varCoded, "utf-8")>

我根本不是编码专家,但我可以看到您正在将格式设置为base N,而不是从base 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> 
输入:

#坦帕查#

编码:

#坦帕查#

已解码:

#chr(strUnEncoded)35;

这似乎可以简化为以下内容,但正如我所说,我对字符编码不太熟悉

<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> 
输入:

#坦帕查#

已解码:

#chr(strUnEncoded)35;


更新CF10/Railo4.x的答案-有一个新函数可以很好地将ascii字符转换为UTF-8进行输出

用法示例:

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

您也可以在CF8和CF9中使用它,如前所述

抱歉,这不起作用。如果我使用此代码:输入:

#tempChar#

编码:

#tempChar#

解码:
#strUnEncoded#

那么当它应该为解码的数据输出“t”时,它会为解码的数据输出74。您能解决这个问题吗?请让我知道……谢谢。我终于让它工作了。我必须迭代4个字符,如果输入的是韩语字符,而不仅仅是“t”,但它工作了。