Как сделать Haskell или ghci способным отображать китайские иероглифы и запускать китайские иероглифы по сценариям?

Я хочу сделать Haskell script для чтения файлов в моей/домашней папке. Однако есть много файлов с китайскими иероглифами, и 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"

Ответ 1

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.

Функции putStr и putStrLn предназначены для фактического написания String на консоли точно так, как это было им предоставлено.

Ответ 2

Благодаря Карлу я использовал putStrLn в качестве обертки вокруг моего fuction:

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

Все работает отлично!