UTF8 En/Decodierung
Übersicht

![]() |
LunatixBetreff: UTF8 En/Decodierung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit dem folgenden Code kann man UTF-8 Strings Encodieren oder Decodieren. Zum Bleistift sehr nützlich, wenn man ICQ/IRC Clienten programmiert. Einfach die Nachricht als ein Byte Arrayabspeichern und der funktion "TUTF8.Utf8ToString" Übergeben.
Ebenso, wenn man eine Nachricht versenden will, einfach die Einzelnen Zeichen der funktion "TUTF8.fromInt" übergeben, zurück kommt ein Byte Array mit den Entsprechenden Bytes. diese müssen in dieser Reihenfolge versendet werden. Je nach Zeichen ist ein UTF-8 Codiertes Zeichen 1-6 Bytes lang. Code: [AUSKLAPPEN] SuperStrict
Framework brl.blitz Import brl.system Local text:String = "wünsche" Local array:Byte[text.length] For Local i:Int = 0 Until text.length array[i] = text[i] Next Local dec_text:String = TUTF8.utf8ToString(array) Local utf8_text:String For Local i:Int = 0 Until dec_text.length Local res:Byte[] = TUTF8.fromInt(dec_text[i]) For Local b:Int = EachIn res utf8_text:+Chr(b) Next Next Notify text Notify dec_text Notify utf8_text Type TUTF8 Function getlength:Int(i:Int) Select True Case i<$7f Return 1 Case i=>$7f And i<$7ff Return 2 Case i=>$7ff And i<$ffff Return 3 Case i=>$ffff And i<$1fffff Return 4 Case i=>$1fffff And i<$3ffffff Return 5 Case i=>$3ffffff And i<$7ffffff Return 6 End Select End Function Function fromInt:Byte[](code:Int) Local value:Byte[] Local length:Int = getlength(code) value = New Byte[length] Select length Case 1 value[0] = code Case 2 value[0] = 192+(code/64) value[1] = 128+(code Mod 64) Case 3 value[0] = 224+(code/4096) value[1] = 128+((code/64) Mod 64) value[2] = 128+(code Mod 64) Case 4 value[0] = 240+(code/262144) value[1] = 128+((code/4096) Mod 64) value[2] = 128+((code/64) Mod 64) value[3] = 128+(code Mod 64) Case 5 value[0] = 248+(code/16777216) value[1] = 128+((code/262144) Mod 64) value[2] = 128+((code/4096) Mod 64) value[3] = 128+((code/64) Mod 64) value[4] = 128+(code Mod 64) Case 6 value[0] = 252+(code/1073741824) value[1] = 128+((code/16777216) Mod 64) value[2] = 128+((code/262144) Mod 64) value[3] = 128+((code/4096) Mod 64) value[4] = 128+((code/64) Mod 64) value[5] = 128+(code Mod 64) End Select Return value End Function Function utf8ToString:String(_data:Byte[]) Local length:Int,str:String,b:Int,x:Int For Local i:Int = 0 Until _data.length b=_data[i] length = getlength(b) If (i+length-1)>_data.length Exit Select length Case 1 x=b Case 2 x=( ((b-192)*64) + (_data[i+1]-128) ) Case 3 x=( ((b-224)*4096) + ((_data[i+1]-128)*64) + (_data[i+2]-128) ) Case 4 x=( ((b-240)*262144) + ((_data[i+1]-128)*4096) + ((_data[i+2]-128)*64) + (_data[i+3]-128)) Case 5 x=( ((b-248)*16777216) + ((_data[i+1]-128)*262144) + ((_data[i+2]-128)*4096) + ((_data[i+3]-128)*64) + (_data[i+4]-128)) Case 6 x=( ((b-252)*1073741824) + ((_data[i+1]-128)*16777216) + ((_data[i+2]-128)*262144) + ((_data[i+3]-128)*4096) + ((_data[i+4]-128)*64) + (_data[i+5]-128)) End Select str:+Chr(x) i:+(length-1) Next Return str End Function End Type |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sehr schön, nur leider im falschem Forum ![]() Aber sowas kann ich auch gut gebrauchen, danke ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. d-bug |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group