Frage Wie kann man Haskell oder Ghci in die Lage versetzen, chinesische Schriftzeichen zu zeigen und chinesische Schriftzeichen mit Namen zu benutzen?


Ich möchte ein Haskell-Skript erstellen, um Dateien in meinem / home-Ordner zu lesen. Es gibt jedoch viele Dateien, die mit chinesischen Schriftzeichen benannt sind, und Haskell und Ghci können es nicht verwalten. Es scheint, dass Haskell und Ghci UTF-8-Zeichen nicht gut darstellen können.

Hier ist, was ich angetroffen habe:

Prelude> "让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档"

"\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723"

11
2017-12-26 11:07


Ursprung


Antworten:


Prelude> putStrLn "\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723"
让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档

GHC behandelt Unicode einwandfrei. Dies sind die Dinge, die Sie darüber wissen sollten:

Es verwendet Ihre Systemcodierung für die Konvertierung von Byte zu Zeichen und zurück beim Lesen von oder Schreiben in die Konsole. Da in Ihrem Beispiel die Konvertierung von Bytes in Zeichen richtig war, würde ich sagen, dass Ihre Systemcodierung korrekt eingestellt ist.

Das show Funktion an String hat einen begrenzten Ausgabezeichensatz. Das show Diese Funktion wird von GHCI verwendet, um das Ergebnis der Auswertung eines Ausdrucks zu drucken print Funktion, um den übergebenen Wert in a zu konvertieren String Darstellung.

Das putStr und putStrLn Funktionen sind zum eigentlichen Schreiben eines String an die Konsole genau so, wie sie ihnen zur Verfügung gestellt wurde.


20
2017-12-26 11:21



Danke an Carl, ich habe es benutzt putStrLn als ein Wrapper um meine Funktion:

ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']]
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!")
ХА

Alles funktioniert gut!


0
2017-07-31 13:38