UTF-8
From HaskellWiki
(Difference between revisions)
m |
(question - what about other string encodings?) |
||
| (8 intermediate revisions not shown.) | |||
| Line 1: | Line 1: | ||
[[Category:Code]] | [[Category:Code]] | ||
| - | |||
| - | + | The simplest solution seems to be to use the [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/utf8-string utf8-string package] from Galois. It | |
| + | provides a drop-in replacement for System.IO | ||
| - | + | ''What about other string encodings?'' | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | == Example == | |
| + | If we use a function from System.IO.UTF8, we should also hide the equivalent one from the Prelude. (Alternatively, we could import the UTF8 module qualified) | ||
<haskell> | <haskell> | ||
| - | > import UTF8 | + | > import System.IO.UTF8 |
| + | > import Prelude hiding (readFile, writeFile) | ||
| + | > import System.Environment (getArgs) | ||
</haskell> | </haskell> | ||
| - | + | The readFile and writeFile functions are the same as before... | |
| - | + | ||
<haskell> | <haskell> | ||
| Line 32: | Line 25: | ||
> reverseUTF8File :: FilePath -> IO () | > reverseUTF8File :: FilePath -> IO () | ||
> reverseUTF8File f = | > reverseUTF8File f = | ||
| - | > do | + | > do c <- readFile f |
| - | > | + | > writeFile (f ++ ".rev") $ reverseLines c |
| - | + | ||
| - | + | ||
> where | > where | ||
> reverseLines = unlines . map reverse . lines | > reverseLines = unlines . map reverse . lines | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
</haskell> | </haskell> | ||
Current revision
The simplest solution seems to be to use the utf8-string package from Galois. It
provides a drop-in replacement for System.IO
What about other string encodings?
Example
If we use a function from System.IO.UTF8, we should also hide the equivalent one from the Prelude. (Alternatively, we could import the UTF8 module qualified)
> import System.IO.UTF8 > import Prelude hiding (readFile, writeFile) > import System.Environment (getArgs)
The readFile and writeFile functions are the same as before...
> main :: IO () > main = > do args <- getArgs > mapM_ reverseUTF8File args > reverseUTF8File :: FilePath -> IO () > reverseUTF8File f = > do c <- readFile f > writeFile (f ++ ".rev") $ reverseLines c > where > reverseLines = unlines . map reverse . lines
