2012-03-27 13 views
2

Ich habe eine (Postgres) -Datenbank, die Unicode-Zeichen nicht akzeptieren kann, aber sie werden als Unicode von Coldfusion eingegeben. Ich konvertiere sie in Ascii wie hier gezeigt und speichere sie in der Datenbank. Das funktioniert gut und hier ist der Code, den ich benutze, um den Vornamen von jemandem (der chinesische/koreanische Zeichen usw. enthält) in ascii umzuwandeln.Konvertieren von ASCII-Zeichen zurück in Unicode in Coldfusion

<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#> 

Nun, wie Reverse ich dies und Coldfusion etwas Unicode umwandeln machen zurück, so dass die richtigen koreanischen/chinesische Schriftzeichen angezeigt wird, wenn einige Protokolle in etc? Danke.

ist dieser Code nicht funktioniert:

Wenn ich diesen Code verwenden:

<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> 

es 74 gibt dann sowohl für decodiert und codiert, wenn es ausgeben sollte "t" für dekodiert

Antwort

1

Ich bin kein Encoding-Experte überhaupt, aber ich kann sehen, Sie formatieren zu Basis N, aber nicht Decodierung von Basis N. Sie müssen auch den Charakter mit chr() in der letzten Zeile

<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> 

es so scheint bekommen könnte zu folgenden vereinfacht werden, aber wie gesagt, ich bin nicht alles, was fimiliar mit Zeichencodierung

<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

Danke. Ich habe es endlich funktioniert. Ich musste 4 Zeichen iterieren, wenn die koreanischen Zeichen statt nur das "t" eingaben, aber es funktionierte. –

0

Versuchen Sie:

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

Sorry, dass nicht funktioniert. Wenn ich diesen Code: \t Eingang:

\t \t # tempChar #

\t \t codiert:

\t # tempChar #

\t \t \t decodiert:

\t # strUnEncoded #

Dann gibt es 74 für sowohl dekodiert als auch codiert, wenn es "t" für decodierte ausgeben sollte –

+0

Haben Sie es geschafft, dieses Problem zu lösen? Bitte lassen Sie mich wissen..danke – FlexyBoz

0

Update auf diese Antwort für CF10/Railo4.x - gibt es eine neue Funktion Canonicalize() die gut ASCII-Zeichen in UTF-8 für die Ausgabe umwandelt.

Beispiel Nutzung:

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

Sie es auch in CF8 verwenden können und 9 beschrieben here

Verwandte Themen