Database 在Coldfusion中将ascii字符转换回uni代码
我有一个不能接受unicode字符的(postgres)数据库,但它们是从coldfusion以unicode输入的。我将它们转换为ascii,如图所示,并将它们存储在数据库中。这很好,下面是我用来将某人的名字(包含中文/韩文字符等)转换为ascii的代码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
<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”,但它工作了。