我有一个(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用于解码和编码答案 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中使用它