看看这个,我试试
appendFile "out" $ show 'д'
'д'是俄语字母的字符。 之后“out”文件包含:
'\1076'
我如何理解字符'д'的unicode数字代码。为什么会这样?我怎样才能得到我角色的正常表现?
有关其他信息,它的效果很好:
appendFile "out" "д"
感谢。
答案 0 :(得分:4)
show
转义ASCII范围之外的所有字符(以及ASCII范围内的所有字符),因此请勿使用show
。
由于“д”工作正常,只需使用它即可。如果你不能,因为д实际上在变量中,你可以使用[c]
(其中c是包含该字符的变量。如果你需要用单引号括起来(比如show do),你可以使用['\'', c, '\'']
。
答案 1 :(得分:3)
在阅读了我对我的评论的回复后,我认为你的情况是你有一些数据结构,可能是类型[(String,String)]
,并且你想输出它用于调试目的。使用show
将是convienent,但它会转义非ASCII字符。
这里的问题不在于unicode,你需要一个能够正确格式化数据以显示的功能。我不认为show
是正确的选择,部分原因是因为逃避某些角色的问题。你需要的是像Show
这样的类型类,但它显示的是用于读取而不是转义字符的数据。也就是说,你需要一台漂亮的打印机,它是一个提供格式化数据显示功能的库。 Hackage上有几款漂亮的打印机,我会看uulib或wl-pprint开始。我认为要么没有太多工作就适合。
以下是uulib工具的示例。使用Pretty
类型而不是Show,该库带有许多有用的实例。
import UU.PPrint
-- | Write each item to StdOut
logger :: Pretty a => a -> IO ()
logger x = putDoc $ pretty x <+> line
在ghci中运行:
Prelude UU.PPrint> logger 'Д'
Д
Prelude UU.PPrint> logger ('Д', "other text", 54)
(Д,other text,54)
Prelude UU.PPrint>
如果要输出到文件而不是控制台,可以使用hPutDoc
函数输出到句柄。您也可以调用renderSimple
生成SimpleDoc
,然后在构造函数上进行模式匹配以处理输出,但这可能更麻烦。无论你做什么,都要避免show
:
Prelude UU.PPrint> show $ pretty 'Д'
"\1044"
您也可以编写类似于show的自己的类型类,但可以根据需要进行格式化。如果你走这条路,Text.Printf
模块可能会有所帮助。
答案 2 :(得分:2)
使用Data.Text。它为IO提供了语言环境感知和编码支持。
答案 3 :(得分:0)
快速搜索“UTF Haskell”应该会给你很好的链接。可能最推荐的包是text包。
import Data.Text.IO as UTF
import Data.Text as T
main = UTF.appendFile "out" (T.pack "д")
答案 4 :(得分:0)
要通过show显示国家字符,请输入您的代码:
rails
您可以尝试:
{-# LANGUAGE FlexibleInstances #-}
instance {-# OVERLAPPING #-} Show String where
show = id
答案 5 :(得分:0)
我之前的解决方案中没有引号。另外,我现在将代码放在模块中,并且必须将模块导入到程序中。
{-# LANGUAGE FlexibleInstances #-}
module M where
instance {-# OVERLAPPING #-} Show String where
show x = ['"'] ++ x ++ ['"']
初学者信息:请记住,节目不会显示任何内容。 show将数据转换为带有其他格式字符的字符串。
我们可以尝试WinGHCi: 自动由WinGHCi
*M> "ł"
"ł"
*M> "ą"
"ą"
*M> "ę"
"ę"
*M> ['ę']
"ę"
*M> ["chleb", "masło"]
["chleb","masło"]
*M> data T = T String deriving (Show)
*M> t = T "Chleb z masłem"
或manualy
*M> (putStrLn . show) "ł"
"ł"
*M> (putStrLn . show) "ą"
"ą"
*M> (putStrLn . show) "ę"
"ę"
*M> (putStrLn . show) ['ę']
"ę"
*M> (putStrLn . show) ["chleb", "masło"]
["chleb","masło"]
*M> data T = T String deriving (Show)
*M> t = T "Chleb z masłem"
*M> (putStrLn . show) t
T "Chleb z masłem"
在要显示的代码中:
putStrLn "ł"
putStrLn "ą"
putStrLn "ę"
putStrLn "masło"
(putStrLn . show) ['ę']
(putStrLn . show) ["chleb", "masło"]
data T = T String deriving (Show)
t = T "Chleb z masłem"
(putStrLn . show) t
我正在添加标签&#34; polskie znaki haskell&#34;对于谷歌。