Entwickler-Ecke

Sonstiges (Delphi) - API-Design: Encoding von Strings


Martok - So 04.09.16 18:40
Titel: API-Design: Encoding von Strings
Hallo zusammen,

heute mal wieder eine konzeptionelle Frage. Welches Encoding würde man für (C-Style) Strings im Interface einer modernen Library erwarten? Es geht mir dabei auch darum wie gut sich das dann in anderen Sprachen abbilden lässt, also in C/C++, C# (irgendwas mit Marshalling?), Python, Rust, wasauchimmer.
Meine Strings sind intern UnicodeStrings, also definitiv nicht nur in einer Ansi-Codepage.

Würde man eher UTF16 (also wchar_t *) oder UTF-8 (also char *?) erwarten? Ich persönlich tendiere ja eher zu UTF-8 weil das irgendwie überall außer in der WinAPI Standard ist und auf *nix-Systemen auch gleich noch die DefaultSystemCodePage ist, andererseits haben wir auf der Pascal-Seite ja schönen Sprachsupport für PWideChar und alles was man drumrum braucht. Vielleicht haben das auch andere?

Jaja, ich weiß, das ist schon irgendwo auch einfach Geschmackssache, aber wenn ich sowieso Support-funktionen schreibe, dann auch gleich richtig ;)

Viele Grüße,

Martok


jaenicke - Mo 05.09.16 07:12

Ich vermute mal du benutzt Lazarus/FPC? Da das intern UTF-8 nutzt, bietet sich das natürlich an...

Unterstützen tun die meisten Sprachen auch UTF-16, aber es ist eben wie du schon sagst auf anderen Plattformen nicht üblich. Falls das Ziel nicht auch andere Plattformen als Windows sind, würde ich aber eher den dortigen Standard UTF-16 benutzen.


Martok - Mo 05.09.16 16:34

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich vermute mal du benutzt Lazarus/FPC?
Ja.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Da das intern UTF-8 nutzt, bietet sich das natürlich an...
UnicodeString ist UTF16, es gibt aber einen nativen UTF8String, ja.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Unterstützen tun die meisten Sprachen auch UTF-16, aber es ist eben wie du schon sagst auf anderen Plattformen nicht üblich. Falls das Ziel nicht auch andere Plattformen als Windows sind, würde ich aber eher den dortigen Standard UTF-16 benutzen.
Doch, ist es schon. Genau das meinte ich nämlich, aus der WinAPI und COM selbst kenne ich überall wchar * oder BSTR, aber anderswo sieht das weniger so aus...