Mir ist aufgefallen, dass SyncTERM eine andere Zeichenkodierung als der standardmäßige MacOS-Terminalemulator verwendet und sie nicht miteinander kompatibel sind. Angenommen, Sie möchten ein Blockzeichen in einer Formatzeichenfolge drucken. In SyncTERM, das die IBM Extended ASCII-Zeichenkodierung verwendet, würden Sie eine oktale Escape-Sequenz wie 261
verwenden . In Terminal.app (und wahrscheinlich auch iTerm2) druckt dies nur ein Fragezeichen. Da diese Terminals UTF-8 verwenden, müssen Sie den uxxxx
verwenden Escape-Sequenz.
Nehmen wir also an, Sie möchten ein bestimmtes Nicht-ASCII-Zeichen in einer Formatzeichenfolge ausgeben, und Sie möchten, dass es in allen Terminalemulatoren unabhängig vom Zeichensatz funktioniert. Ich vermute, Sie würden einen Eintrag in der terminfo-Datenbank verwenden, aber ich bin mit terminfo nicht wirklich vertraut. Ich brauche hier ein paar Hinweise.
Akzeptierte Antwort:
Kurz:
- termininfo bringt Sie nicht dorthin, hilft nicht
- Es gibt keinen zuverlässigen Weg, um festzustellen, welche Codierung ein Terminal tatsächlich verwendet
- mit Unicode-Literalen zu beginnen, ist der richtige Weg, vorausgesetzt, Sie wissen, welche Codierung Sie auf dem Terminal verwenden möchten
- der Benutzer muss wissen, welches Gebietsschema angemessen ist und welche Codierung das Terminal ausführen kann
- Der C-Standard hat Funktionen zum Konvertieren von „Wide“-Zeichen, die Sie auf jeder Unix-ähnlichen Plattform zur Verfügung haben werden (siehe zum Beispiel
setlocale
,wcrtomb
undwcsrtombs
)