Ich habe eine Textdatei, die eine Art von Fallback-Konvertierungen von Unicode-Zeichen enthält (die Unicode-Codepunkte in spitzen Klammern). So enthält es z.B. foo<U+017E>bar
sollte "foošbar" sein. Gibt es einen einfachen Weg in R, um die ganze Datei in UTF8 umzuwandeln, wenn diese Zeichen konvertiert werden? Leider bin ich auf Windows und kann kein unterstütztes UTF-8-Gebietsschema finden.konvertieren utf8 Code-Punkt-Strings wie <U+0161> zu utf8
Antwort
Vielleicht:
library(stringi)
library(magrittr)
"foo<U+0161>bar and cra<U+017E>y" %>%
stri_replace_all_regex("<U\\+([[:alnum:]]+)>", "\\\\u$1") %>%
stri_unescape_unicode() %>%
stri_enc_toutf8()
## [1] "foošbar and cražy"
arbeiten kann (ich brauche nicht die letzte Umwandlung auf macOS Sie können jedoch auf Windows).
Keine Konvertierung erforderlich, Windows verwendet nativ Unicode. R-Pakete verwechseln hingegen viel Unicode- und ANSI-Code. Um die Sache noch schlimmer zu machen, erkennen viele R-Pakete keine Kodierungen, sondern versuchen, aus dem Gebietsschema oder der Sprache des Systems zu erraten. Das macht es interessant, wenn Sie versuchen, mehrere Unicode-Kodierungen oder sogar mehrere Datums- und Zahlenformate zu lesen –
Die vorherige Antwort sollte funktionieren, wenn der Codepunkt mit genau vier Ziffern dargestellt wird. Hier ist eine modifizierte Version, die für eine beliebige Anzahl von Ziffern zwischen 1 und 8 funktionieren sollte.
library(stringi)
library(magrittr)
"foo<U+0161>bar and cra<U+017E>y, Phoenician letter alf <U+10900>" %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{4})>", "\\\\u$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{5})>", "\\\\U000$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{6})>", "\\\\U00$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{7})>", "\\\\U0$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{8})>", "\\\\U$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{1})>", "\\\\u000$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{2})>", "\\\\u00$1") %>%
stri_replace_all_regex("<U\\+([[:alnum:]]{3})>", "\\\\u0$1") %>%
stri_unescape_unicode() %>%
stri_enc_toutf8()
## [1] "foošbar and cražy, Phoenician letter alf "
- 1. Zeichenfolge in UTF8 konvertieren
- 2. konvertieren Unicode Ucs4 in UTF8
- 3. konvertieren Ausgabe von MySQL-Abfrage zu utf8
- 4. Konvertieren von Problem ANSI zu UTF8 C#
- 5. Konvertieren latin1 Zeichenfolge in utf8?
- 6. wie Dezimal zu jedem UTF8-Zeichen zu konvertieren?
- 7. decode utf8 zu big5
- 8. Wie konvertiert man ISO8859-15 zu UTF8?
- 9. Wie Konvertieren Mysql Codierung UTF8 zu UTF8mb4 in Rails-Projekt
- 10. UTF8 Encode/€
- 11. Konvertieren Puffer base64 -> utf8 Codierung node.js
- 12. C#: Byte [] in UTF8-codierte Zeichenfolge konvertieren
- 13. MySQL Konvertieren latin1 Daten in UTF8
- 14. So konvertieren Sie UTF8 in Unicode
- 15. UTF8 byte [] zu String-Konvertierung
- 16. String UTF8 SHA256 zu BASE64
- 17. Ändern von utf8mb4 zu utf8
- 18. Konvertieren TXT-Datei Codierung von DOS737 zu UTF8
- 19. Konvertieren von MySQL-Tabellen von latin1 zu utf8
- 20. Konvertierung von EBCDIC zu UTF8 unter Linux
- 21. Wie dplr :: tbl Verbindungscodierung zu utf8 ändern?
- 22. wie UTF8 Zeichenfolge in iPhone
- 23. C++: Wie Ersatzzeichen in utf8
- 24. Ruby to_yaml utf8 string
- 25. SetThreadLocale und UTF8
- 26. Escape utf8 mit Regex
- 27. UTF8-Verarbeitung in C
- 28. RMysql Codierung utf8 Problem
- 29. C++ UTF8 Codierung
- 30. Fall unempfindlich utf8
UTF8 ist eine Codierung, * NOT * ein Gebietsschema. Windows verwendet seit mindestens 2000 Unicode nativ. R-Pakete verwechseln zwar Unicode- und ANSI-Code, hängen dann aber von der Änderung der Lokalisierungseinstellungen ab, um mit einem Codierungsproblem umzugehen. Was hast du eigentlich versucht? Verschiedene Pakete haben unterschiedliche Macken. Einige von ihnen verwechseln leider Sprache und Kodierung –
Was sind die Kodierung und der Inhalt der * Datei *? Verwendet es eine der Unicode-Kodierungen? Dann könnte es "foošbar" ohne Konvertierungsprobleme enthalten. Sind Sie sicher, dass das Problem nicht die Schriftart von RStudio oder RRO ist? –
Mein Problem ist, dass ich nicht zu einem UTF-8-freundlichen Gebietsschema unter Windows wechseln kann; Dinge wie 'Sys.setlocale (" LC_ALL "," en_US.UTF-8 ")' funktionieren nicht, weiß nicht warum. Also ich habe dieses Problem was auch immer die Datei kodiert. – user43018