14

/home フォルダー内のファイルを読み取る Haskell スクリプトを作成したいと考えています。しかし、漢字で名前が付けられたファイルが多く、Haskell や Ghci では管理できません。Haskell と Ghci は UTF-8 文字の表示が苦手なようです。

これが私が遭遇したものです:

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

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

2 に答える 2

26
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はUnicodeを問題なく処理します。これらはあなたがそれについて知っておくべきことです:

コンソールからの読み取りまたはコンソールへの書き込み時に、システムエンコーディングを使用してバイトから文字に変換したり、元に戻したりします。あなたの例ではバイトから文字への変換が適切に行われたので、システムエンコーディングは適切に設定されていると思います。

上のshow関数にStringは、制限された出力文字セットがあります。このshow関数は、式の評価結果を出力するためにGHCIによって使用され、print渡された値を表現に変換するために関数によって使用されStringます。

putStrand関数は、実際にコンソールに提供されたとおりにをputStrLn書き込むためのものです。String

于 2012-12-26T11:21:01.490 に答える
0

カールのおかげで、putStrLn私は自分の関数のラッパーとして使用しました:

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

すべてがうまくいきます!

于 2015-07-31T13:38:52.177 に答える