[ Impressum ]

Konvertierung zwischen MacRoman und Unicode

www.Rozek.de > LiveCode > MacRoman and Unicode
Wie im Artikel "LiveCode und MacRoman unter Mac OS X" bereits beschrieben wurde, verwendet LiveCode [1] unter Mac OS X standardmäßig intern immer noch den Zeichensatz MacRoman [2] für die Eingabe und Anzeige von Texten.

Für global einsetzbare Anwendungen ist Unicode [3] jedoch viel praktischer. An dieser Stelle sollen deshalb die Konvertierungen zwischen MacRoman und Unicode genauer untersucht werden

Von MacRoman nach Unicode

Wie zuvor erläutert, erzeugt LiveCode auf dem Mac (und nur dort!) ohne besondere Vorkehrungen Texte im Zeichensatz MacRoman - für den allgemeinen Fall müssen diese nach Unicode konvertiert werden: dies geschieht mit der Funktion

get uniEncode(MacRomanText, "roman")

der "Trick" in diesem Beispiel liegt in der Verwendung von "roman" als "Sprache" für die Konvertierung - aus der Dokumentation zu uniEncode ist dies nicht direkt ersichtlich.

Zur Kontrolle kann wieder das zuvor beschriebene (leicht angepaßte) Skript zur Anzeige des MacRoman-Zeichensatzes dienen - die Anzeige erfolgt jetzt aber im Unicode-Modus (der auszugebende Text wird deshalb zuvor mittels uniEncode in Unicode gewandelt):

--------------------------------------------------------------------------------
-- showMacRomanAsUnicode displays a MacRoman character table --
--------------------------------------------------------------------------------

command showMacRomanAsUnicode
set the useUnicode to false

putMacIntoMsg empty
putMacAfterMsg " |-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F | " & LF
putMacAfterMsg "---+------------------------------------------------+---" & LF
putMacAfterMsg "0- | | 0-" & LF
putMacAfterMsg "1- | | 1-" & LF

repeat with Row = 2 to 15
putMacAfterMsg format("%1X- |", Row) # start new table row

repeat with Col = 0 to 15
local CharCode; put Row*16 + Col into CharCode
if (CharCode > 31) and (CharCode <> 127) then # is character printable?
putMacAfterMsg " " & NumToChar(CharCode) & " " # show printable char
else
putMacAfterMsg " " # skip non-printable characters
end if
end repeat

putMacAfterMsg format("| %1X-", Row) & LF # end table row
end repeat

putMacAfterMsg "---+------------------------------------------------+---" & LF
putMacAfterMsg " |-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F | " & LF
end showMacRomanAsUnicode

command putMacIntoMsg MacRomanText
set the UnicodeText of field "Results" of card "Single Line" \
of stack "Message Box" to uniEncode(MacRomanText,"roman")
end putMacIntoMsg

command putMacAfterMsg MacRomanText
set the UnicodeText of field "Results" of card "Single Line" \
of stack "Message Box" to (the UnicodeText of field "Results" \
of card "Single Line" of stack "Message Box") & \
uniEncode(MacRomanText,"roman")
end putMacAfterMsg

Auch hier gilt wieder, daß die "Message Box" ggfs. auf eine geeignetere Schrift umgestellt werden muß:

set the TextFont of field "Results" of card "Single Line" of stack "Message Box" to "Monaco"

Wenn alles funktioniert hat, sollte dieses Skript dieselbe Ausgabe erzeugen wie das "Original", nämlich:

|-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F |
---+------------------------------------------------+---
0- | | 0-
1- | | 1-
2- | ! " # $ % & ' ( ) * + , - . / | 2-
3- | 0 1 2 3 4 5 6 7 8 9 : ; < = > ? | 3-
4- | @ A B C D E F G H I J K L M N O | 4-
5- | P Q R S T U V W X Y Z [ \ ] ^ _ | 5-
6- | ` a b c d e f g h i j k l m n o | 6-
7- | p q r s t u v w x y z { | } ~ | 7-
8- | Ä Å Ç É Ñ Ö Ü á à â ä ã å ç é è | 8-
9- | ê ë í ì î ï ñ ó ò ô ö õ ú ù û ü | 9-
A- | † ° ¢ £ § • ¶ ß ® © ™ ´ ¨ ≠ Æ Ø | A-
B- | ∞ ± ≤ ≥ ¥ µ ∂ ∑ ∏ π ∫ ª º Ω æ ø | B-
C- | ¿ ¡ ¬ √ ƒ ≈ ∆ « » … À Ã Õ Œ œ | C-
D- | – — “ ” ‘ ’ ÷ ◊ ÿ Ÿ ⁄ € ‹ › fi fl | D-
E- | ‡ · ‚ „ ‰ Â Ê Á Ë È Í Î Ï Ì Ó Ô | E-
F- |  Ò Ú Û Ù ı ˆ ˜ ¯ ˘ ˙ ˚ ¸ ˝ ˛ ˇ | F-
---+------------------------------------------------+---
|-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F |

Der (beileibe nicht nur akademische) Unterschied zwischen beiden Fassungen liegt in der Verwendung von Unicode, wodurch in MacRoman erzeugte Texte plötzlich auch auf anderen Plattformen darstellbar werden.

Von Unicode nach MacRoman

Mithilfe der Funktion

get uniDecode(UnicodeText, "roman")

kann ein in Unicode vorliegender Text (im Prinzip) auch wieder nach MacRoman gewandelt werden. Allerdings sollte man hierbei Vorsicht walten lassen, da Unicode wesentlich mehr Zeichen umfaßt als MacRoman und somit Text verloren geht, sobald man versucht, Zeichen außerhalb des MacRoman-Zeichensatzes in diesen zu konvertieren.

Literaturhinweise

[1]
(RunRev Ltd.)
LiveCode | Create apps for multiple platforms. Quickly. Easily. Free
LiveCode ist eine (dem legendären HyperCard von Apple) nachempfundene Entwicklungsumgebung sowohl für stationäre (Windows, Linux, MacOS X) als auch für mobile (IOS, Android) Anwendungen. Ein visueller Editor ermöglicht den schnellen Entwurf von Bedienoberflächen, die der englischen Sprache nachempfundene Programmiersprache erlaubt auch Nicht-Programmierprofis die Entwicklung professioneller Anwendungen und das Konzept der "Modifikation am laufenden Programm" vereinfacht Test und Fehlerbehebung.
[2]
(Wikipedia)
Macintosh Roman
Von der Web-Seite: "Mac OS Roman (auch Macintosh Roman, kurz MacRoman) ist der von Mac OS verwendete 8-Bit-Zeichensatz für Westeuropa und Amerika. [...]"
[3]
(Wikipedia)
Unicode
Von der Web-Seite: "Unicode [...] ist ein internationaler Standard, in dem langfristig für jedes sinntragende Schriftzeichen oder Textelement aller bekannten Schriftkulturen und Zeichensysteme ein digitaler Code festgelegt wird. [...]"