Bei einer Zeichenkette, Zeichenliste, Byte - Stream, Folge ... , die sowohl gültige UTF-8 und gültige Windows-1252 ( die meisten Sprachen werden wahrscheinlich einen normalen UTF-8 - String nehmen wollen), wandeln sie aus (das heißt, so tun , als es ist ) Windows-1252 bis UTF-8 .
Durchgelaufenes Beispiel
Die UTF-8-Zeichenfolge
I
♥
U
T
F
-
8
wird als Byte dargestellt.
49
20
E2 99 A5
20
55
54
46
2D
38
Diese Byte-Werte in der Windows-1252-Tabelle geben uns die Unicode-Entsprechungen an,
49
20
E2 2122 A5
20
55
54
46
2D
38
die als gerendert werden
I
â
™
¥
U
T
F
-
8
Beispiele
£
→ £
£
→ £
£
→ £
I ♥ UTF-8
→ I ♥ UTF-8
árvíztűrő tükörfúrógép
→ árvÃztűrÅ‘ tükörfúrógép
€ ‚ƒ„…†‡ˆ‰Š‹Œ Ž ‘’“”•–—˜™š›œ žŸ
. (Leerzeichen = nicht verwendet)Antworten:
Bash, 14 Bytes
Probieren Sie es online!
quelle
Java 8,
72663625 BytesProbieren Sie es online aus.
cp1252
ist ein Alias fürWindows-1252
. Dieser Aliascp1252
ist der kanonische Name für die APIsjava.io
undjava.lang
, während der vollständige NameWindows-1252
der kanonische Name für diejava.nio
API ist. Hier finden Sie eine vollständige Liste der unterstützten Java-Codierungen , bei denen wir immer die kürzeste der beiden für das Codegolfing verwenden möchten.quelle
java.nio
API": PR 3.5.0 oder höher,
3220 BytesProbieren Sie es online!
Seltsamerweise kurz für eine String- Herausforderung in R ... danke an JayCe, der 12 weitere Bytes gesenkt hat!
scan
Optional kann einencoding
Argument verwendet werden, um die Codierung der Eingabezeichenfolge festzulegen.latin1
entspricht laut der Dokumentation vonEncoding
quelle
Encoding
... und erfuhr, dassscan
auch einencoding
Argument O_O ... 20 Bytes hatPython 2 ,
4038 Bytes-2 Bytes dank Erik dem Outgolfer .
Probieren Sie es online!
u8 ist ein Alias für
utf-8
.quelle
input().decode(...).encode(...)
:) Ich denke auch, dass Sie in der Lage sein könnten, einige Windows-Konsolen-Codierungen zu verwenden, wenn Sie in Powershell sind (aber ich bin völlig unsicher darüber).Python 3 ,
38 3634 BytesProbieren Sie es online!
Hinweis: Nachdem ich eine funktionierende Funktion hatte, verwendete ich die Antwortantwort von python2 von ovs, um Informationen zu den Feldern für Kopf- und Fußzeile für tio zu erhalten, sodass Kopf- und Fußzeile identisch sind
edit: Trimmed es ein wenig dank python3 standardmäßig utf8 und ein Tipp von Ovs Vorlage :)
quelle
JavaScript, 64 Byte
Code-Snippet anzeigen
Noch länger als Java antworten. So traurig. :(
quelle
Ruby , 31 Bytes
Probieren Sie es online!
Testfälle sind im TIO enthalten
quelle
C #, 81 Bytes
Probieren Sie es online!
Danke an Schmalls für 3 Bytes
quelle
using e=System.Text.Encoding;s=>e.GetEncoding(1252).GetString(e.UTF8.GetBytes(s))
, es auf 81 zu bringen?180 Byte, Computercode (16-Bit x86)
Mir ist aufgefallen, dass die meisten Antworten die integrierte Codierung / Decodierung verwenden (was meiner Meinung nach vollkommen in Ordnung ist), aber ich dachte, ich werde meine 16-Bit-Suche fortsetzen .
Wie bei den vorherigen wurde dies ohne Compiler durchgeführt, wobei hauptsächlich HT-Hexeditor und ICYs Hexplorer verwendet wurden .
Präparation
Die Implementierung ist ziemlich unkompliziert, obwohl ich nicht viel darüber nachgedacht habe, im Voraus zu fließen, so dass es einige Spaghetti gibt.
Ich werde die Reihenfolge ein wenig mischen, um es einfacher zu machen, zu folgen ...
Überspringen Sie eine Tabelle, die Zeichen> = 0x80 <0xa0 Unicode-Codes zuordnet.
Ungültige werden als 0 codiert und keiner Zuordnung zugeordnet
Die Hilfsfunktion zum Ausdrucken von Zeichen
al
wird mehrmals aufgerufen.Register vorbereiten. Die Daten werden in 0x100 eingelesen. Zeigen Sie
si
in die obige Übersetzungstabelle.Lese char von stdin, springe zu 0x7d wenn EOF.
Nebenbemerkung: Dies ist eigentlich ein kleiner (aber ziemlich bekannter) Trick, den 0x7d enthält
ret
. Dies führt dazupop sp
, dass sichsp
an den Startpunkten bis zum Ende eines Segments ein solcher Trick00 00
befindet undcs:0
in DOS enthältCD 20
, wodurch die Anwendung beendet wird.Wenn char <0x80 ist, drucken Sie es einfach aus und gehen Sie zum Schleifenanfang (da die Hilfsfunktion BX auf 1 - stdout setzt, gehen die Sprünge zu
dec bx
).Dieser Teil befasst sich mit Zeichen> = 0xa0, teilt ASCII-Code in "hohe" zwei Bits und "niedrige" 6 Bits auf und wendet die utf-8-Maske c080 für zwei Bytes an und druckt dann beide
Dieser Teil befasst sich mit Zeichen> = 0x80 <0xa0, findet den richtigen utf-8-Code in der Tabelle oben, wenn der Code gleich 0 ist, springe zum Anfang, wenn er unter 0x7ff liegt (ergo: passt auf zwei UTF-8-Bytes) Passen Sie einfach den Wert an und verwenden Sie den vorherigen Code erneut bei 0x166.
Der letzte Teil befasst sich mit Codes, die über 0x7FF liegen, löscht niedrige 12 Bits, wendet 0xE0 an (siehe UTF-8-Codierungsbeschreibung als Referenz) und druckt es aus, stellt die unteren 12 Bits ein und wendet die 8080-Maske an und verwendet den Teil, der zwei Zeichen ausspuckt, erneut .
quelle
PHP + mbstring ,
6349 Bytes<?=mb_convert_encoding($argv[1],'UTF8','CP1252');
Es funktioniert nicht auf TIO aufgrund des Fehlens von mbstring. Der dritte Parameter zwingt mbstring, die Zeichenfolge als Windows-1252-codiert zu interpretieren
-14 Bytes dank Ismael Miguel
quelle
<?=mb_convert_encoding($argv[1],'UTF8','CP1252');
<- noch kürzer!C (gcc) +
libiconv
,119117 BytesProbieren Sie es online!
quelle