UTF-8 String in RichTextBox anzeigen



  • @firefly Bitte nicht wieder das UTF-8 Thema aufwärmen, das hatten wir jetzt doch erfolgreich durch. Hier ist kein UTF-8 im Spiel. @hkdd hatte das nur fälschlich angenommen weil seine Source-Files UTF-8 sind. Die CLR Strings die daraus entstehen sind aber schon UTF-16, und falsch konvertiert wird da auch sicher nichts. Weil UTF-8 -> UTF-16 Konvertierung ein paar einfache Zeilen Code sind, in denen bloss ein paar Bits rumgeschoben werden.



  • @hkdd Bitte lerne mal ein bisschen was über die Tools mit denen du da arbeitest. Alle Strings in .NET sind immer UTF-16. Dass du im File UTF-8 bekommst, liegt daran, dass das Default-Encoding eines StreamWriter, wenn du keines angibst, halt UTF-8 ist.

    Hier https://docs.microsoft.com/en-us/dotnet/api/system.io.streamwriter?view=netframework-4.8

    StreamWriter defaults to using an instance of UTF8Encoding unless specified otherwise.

    Im Speicher sind .NET Strings trotzdem immer UTF-16, und sämtliche Windows Controls (ob .NET oder nicht) arbeiten auch immer mit UTF-16. (Also ausgenommen auf DOS-basierten Windowsen ala 95/Me.)

    UTF-8 ist und war hier nie im Spiel, wenn man mal von Encoding deiner Source-Files absieht.

    Das Problem ist das (nicht vorhandene) Spezialhandling von Emoticons und/oder allgemein Zeichen die im aktuellen Font nicht vorkommen. (Ich schätze mal dass Emoticons überhaupt super-spezial behandelt werden, da sie farbig dargestellt werden. Und IIRC können normale Schriftarten überhaupt gar keine farbigen Glyphen enthalten.)



  • @hustbaer ,
    ok, ich habe also viel über UTF-16 erfahren.
    Ursprünglich ging es mir lediglich darum, dass ich in einem Log-Fenster (zunächst im RichText-Format) u.a. die Namen von Dateien und Pfaden protokolliere. Dabei ist es mir völlig egal, in welchem Format das passiert. Das RichText-Fenster hat diese Zeichen nicht angezeigt. Ich habe sie erst kennen gelernt, seit meine drei Enkel ihre Dateien und Namen in den iPhones alle mit so einem Herz gekennzeichnet haben und ich beim Sichern dieser Dateien Probleme mit diesen Dateinamen bekam.
    Nun habe ich das mit C# und einem Edit-Fenster gelöst.
    Parallel habe ich das Programm in Delphi programmiert und dort gab es ebenfalls derartige Probleme mit diesem Zeichen. Die habe ich inzwischen auch gelöst.
    Beide Versionen können mit diesem Zeichen umgehen.
    Korrekt angezeigt wird es ab Windows 8.1.
    Unter Win7 und XP wird ein Quadrat angezeigt.

    Ich bin ja lediglich eine Hobby-Programmierer auf dem PC.
    Früher habe ich viele Jahr Host-Programme auf IBM-Großrechnern erstellt. Und parallel etwas C++ und Delphi und vor Windows mit C++ und Turbo Pascal.

    Bei Problemen versuche ich im Forum und bei Google eine Lösung zu finden. Und dafür danke ich Euch allen.



  • @hustbaer sagte in UTF-8 String in RichTextBox anzeigen:

    dass das Default-Encoding eines StreamWriter, wenn du keines angibst, halt UTF-8 ist.

    Ich habe den StreamWriter lediglich für dieses kleine Testprogramm benutzt, weil ich einen Weg gesucht habe, einen String auszugeben und dann in der Datei zu sehen, wie er aufgebaut ist. Lieber wäre es mir gewesen, ich hätte im Debugger eine Möglichkeit gefunden den String im Hex-Format ansehen zu können, so wie er tatsächlich im Speicher steht.
    Mir ist das nicht gelungen, entweder, weil das nicht geht oder weil ich nicht weiß, wie man das macht.



  • Das hättest du gleich schreiben sollen ;- )
    Für VS 2017 gibt es z.B. den HexVisualizer 2017.


Anmelden zum Antworten