Zeichenkonvertierung --> Welche ist das?

  • Hallo zusammen,

    ich möchte einen Vorgang, den ich bisher immer manuell zur Konvertierung von chinesischen Schriftzeichen umgesetzt habe, von einem Autoit Script erledigen lassen.

    Im Prinzip geht es darum, chinesische Texte, die ich in einer mir unbekannten Konvertierung von einem Programmierer erhalte in ein Format umzuwandeln, das von einer etwas exotischen Software namens "Broadvision Quciksilver" benötigt wird, damit am Ende wieder ein lesbarer Chinesischer Text rauskommt.

    Mein "alter Vorgang" war der folgende (beschrieben am Beispiel einer Textzeile):

    1. Den deutschen Text "AK336 Rezept wird geladen" habe ich erhalten als "AK336 Åä·½Òѱ»ÔØÈë" --> Daraus soll nun wieder ein lesbarer Text in chinesisch werden.
    2. Dazu kopiere ich den Text in eine Textdatei und öffne diese mit Excel.
    3. Excel fragt mich, welche Codierung (in Excel als "Dateiursprung" bezeichnet) für den Import verwendet werden soll.
    4. Ich wähle "936: Chinesisch vereinfacht (GB2312)
    5. Der Text wird korrekt angezeigt: AK336 配方已被载入
    6. Ich kopiere den Text in das Dokument der Software Quicksilver. Auch dort wird es korrekt angezeigt.
    7. Ich speichere das Dokument im ASCII-Modus ab (da ich dieses zur Weiterverwendung in diesem Format brauche)
    8. Nun siet der Text folgendermaßen aus: "AK336 <#914d><#65b9><#5df2><#88ab><#8f7d><#5165>" --> Und genau das ist das Format, das ich generieren will.

    D.h. um die Frage nochmal auf den Punkt zu bringen:
    Wie schaffe ich es, aus dem Satz AK336 Åä·½Òѱ»ÔØÈë das folgende Format zu generieren "AK336 <#914d><#65b9><#5df2><#88ab><#8f7d><#5165>"? Was sind das denn überhaupt für Zeichen?

    Bin für jede Hilfe dankbar...

    Viele Grüße

    Daniel

  • Also, Tante Google findet das hier: http://de.wikipedia.org/wiki/GB2312
    und http://www.decodeunicode.org/de/u+914d
    Damit dürfte klar sein, wie der Kram codiert ist.

    EDIT: hier gibts ne Tabelle, die man vielleicht für die Umwandlung nutzen kann: http://www.unicode.org/Public/MAPPING…NDOWS/CP936.TXT

    EDIT2: Was ich nicht verstehe: "AK336 Åä·½Òѱ»ÔØÈë" enthält ASCII und 2-byte Codes (siehe Tabelle)... wie kann man das überhaupt umwandeln ?

    EDIT3: habs kapiert, alles was mit 0x81 oder höher beginnt, ist ein 2-byte Code... OK, so wirds gehen

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

    3 Mal editiert, zuletzt von ohforf (28. März 2013 um 14:05)

  • Hi,

    ich hab Tante Google auch schon gefragt komm aber trotzdem noch nicht drauf ;)

    Gibts nicht vielleicht ne Funktion, der man einen Text und die gewünschte Codierung übergibt und die dann den Text ausspuckt.
    Also was in der Art

    Func kodiermal($text, $kodierung)
    ...
    EndFunc

    $text_konvertiert = kodiermal ("AK336 配方已被载入", GB2312)

    --> Ausgabe: AK336 <#914d><#65b9><#5df2><#88ab><#8f7d><#5165>

    Kann mir jemand noch etwas unter die Arme greifen, wie ich mir vielleicht selber so ne Funktion schreiben könnte.
    Bin noch ein relativer Autoit-Beginner...

    Beste Grüße

    Daniel

  • Ein Versuch:

    [autoit]


    #include <WinAPI.au3>
    #include <String.au3>

    [/autoit][autoit][/autoit][autoit]

    $string = "AK336 Åä·½Òѱ»ÔØÈë"
    global $i = 1, $c = "", $out = ""
    while $i < StringLen($string)
    if asc(StringMid($string,$i,1)) < 129 then
    $out &= StringMid($string,$i,1)
    else
    $c = _WinAPI_MultiByteToWideChar(StringMid($string,$i,2),936,$MB_PRECOMPOSED,True)
    $out &= "<#" & StringMid(StringToBinary($c,3),3,4) & ">"
    if @error then ConsoleWrite("Error: " & @error & @crlf)
    $i+=1
    EndIf
    $i+=1
    WEnd

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite($out & @CRLF)

    [/autoit]


    Ausgabe bei mir:
    AK336 <#914D><#65B9><#5DF2><#88AB><#8F7D><#5165>

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Perfect! You made my day!!!
    Das war das schönste Osterei, dass ich bekommen hab ;)

    Beste Grüße

    Daniel

  • Perfect! You made my day!!!Das war das schönste Osterei, dass ich bekommen hab ;-)Beste GrüßeDaniel

    Da hast du dir aber Zeit beim Suchen gelassen aber Hauptsache dein Problem ist gelöst. Schön wäre es allerdings auch wenn du das Thema auf gelöst setzt.
    Dazu einfach den Eröffnungsbeitrag bearbeiten und den Präfix (nähe) Überschrift auf gelöst setzen und absenden.

    PS.: da dies warscheins deinem Broterwerb dient solltest du Ohforf einen Geschenkgutschein zukommen lassen.

    mfg autoBert