在Coldfusion中将ascii字符转换回uni-code

时间:2012-03-27 00:25:04

标签: database coldfusion

我有一个(postgres)数据库,它不能接受unicode字符,但它们是从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> 

然后当输出“t”用于解码

时,它输出74用于解码和编码

3 个答案:

答案 0 :(得分:1)

我根本不是编码专家,但我可以看到你的格式是基于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> 

答案 1 :(得分:0)

尝试:

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

答案 2 :(得分:0)

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

使用示例:

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

您也可以按照here

所述在CF8和9中使用它