Haskell 使用区域设置处理文本文件,忽略非Ascii字符

Haskell 使用区域设置处理文本文件,忽略非Ascii字符,haskell,Haskell,如何加载和打印此文件的内容? 我当前的示例代码 main :: IO () main = do content <- readFile "foo.txt" putStrLn content 如果将所有非Ascii字符替换为虚拟字符或完全删除,则完全可以。GHC支持本地语言环境。只要您的本地设置合理,它就会“正常工作”: 设置例如 LANG=en_US.UTF-8 GHC支持本地语言环境。只要您的本地设置合理,它就会“正常工作”: 设置例如 LANG=en_US.UTF

如何加载和打印此文件的内容?

我当前的示例代码

main :: IO ()
main = do
    content <- readFile "foo.txt"
    putStrLn content

如果将所有非Ascii字符替换为虚拟字符或完全删除,则完全可以。

GHC支持本地语言环境。只要您的本地设置合理,它就会“正常工作”:

设置例如

LANG=en_US.UTF-8

GHC支持本地语言环境。只要您的本地设置合理,它就会“正常工作”:

设置例如

LANG=en_US.UTF-8

GHC支持本地语言环境。只要您的本地设置合理,它就会“正常工作”:

设置例如

LANG=en_US.UTF-8

GHC支持本地语言环境。只要您的本地设置合理,它就会“正常工作”:

设置例如

LANG=en_US.UTF-8

刚刚写了这篇文章,现在对我很有用:

import Data.Char
import Control.Applicative
import qualified Data.ByteString.Char8 as B

readFileAscii :: String -> IO String
readFileAscii path = B.unpack <$> B.map (clearChar '-') <$> B.readFile path
    where
        clearChar :: Char -> Char -> Char
        clearChar d c
            | c == '\r' || c == '\n' = c
            | c >= '\32' && c < '\128' = c
            | otherwise = d

main :: IO ()
main = do
    content <- readFileAscii "foo.txt"
    putStrLn $ content
    putStrLn $ map toUpper content
导入数据.Char
导入控制
将限定数据.ByteString.Char8作为B导入
readFileAscii::String->IO字符串
readFileAscii路径=B.unpack B.map(clearChar'-')B.readFile路径
哪里
clearChar::Char->Char->Char
clearChar d c
|c=='\r'| c=='\n'=c
|c>='\32'&&c<'\128'=c
|否则=d
main::IO()
main=do

content刚刚写了这篇文章,现在对我很有用:

import Data.Char
import Control.Applicative
import qualified Data.ByteString.Char8 as B

readFileAscii :: String -> IO String
readFileAscii path = B.unpack <$> B.map (clearChar '-') <$> B.readFile path
    where
        clearChar :: Char -> Char -> Char
        clearChar d c
            | c == '\r' || c == '\n' = c
            | c >= '\32' && c < '\128' = c
            | otherwise = d

main :: IO ()
main = do
    content <- readFileAscii "foo.txt"
    putStrLn $ content
    putStrLn $ map toUpper content
导入数据.Char
导入控制
将限定数据.ByteString.Char8作为B导入
readFileAscii::String->IO字符串
readFileAscii路径=B.unpack B.map(clearChar'-')B.readFile路径
哪里
clearChar::Char->Char->Char
clearChar d c
|c=='\r'| c=='\n'=c
|c>='\32'&&c<'\128'=c
|否则=d
main::IO()
main=do

content刚刚写了这篇文章,现在对我很有用:

import Data.Char
import Control.Applicative
import qualified Data.ByteString.Char8 as B

readFileAscii :: String -> IO String
readFileAscii path = B.unpack <$> B.map (clearChar '-') <$> B.readFile path
    where
        clearChar :: Char -> Char -> Char
        clearChar d c
            | c == '\r' || c == '\n' = c
            | c >= '\32' && c < '\128' = c
            | otherwise = d

main :: IO ()
main = do
    content <- readFileAscii "foo.txt"
    putStrLn $ content
    putStrLn $ map toUpper content
导入数据.Char
导入控制
将限定数据.ByteString.Char8作为B导入
readFileAscii::String->IO字符串
readFileAscii路径=B.unpack B.map(clearChar'-')B.readFile路径
哪里
clearChar::Char->Char->Char
clearChar d c
|c=='\r'| c=='\n'=c
|c>='\32'&&c<'\128'=c
|否则=d
main::IO()
main=do

content刚刚写了这篇文章,现在对我很有用:

import Data.Char
import Control.Applicative
import qualified Data.ByteString.Char8 as B

readFileAscii :: String -> IO String
readFileAscii path = B.unpack <$> B.map (clearChar '-') <$> B.readFile path
    where
        clearChar :: Char -> Char -> Char
        clearChar d c
            | c == '\r' || c == '\n' = c
            | c >= '\32' && c < '\128' = c
            | otherwise = d

main :: IO ()
main = do
    content <- readFileAscii "foo.txt"
    putStrLn $ content
    putStrLn $ map toUpper content
导入数据.Char
导入控制
将限定数据.ByteString.Char8作为B导入
readFileAscii::String->IO字符串
readFileAscii路径=B.unpack B.map(clearChar'-')B.readFile路径
哪里
clearChar::Char->Char->Char
clearChar d c
|c=='\r'| c=='\n'=c
|c>='\32'&&c<'\128'=c
|否则=d
main::IO()
main=do

内容好。如果我事先不知道输入文件中需要什么语言环境,是否也可以过滤掉这些字符?一个好的选择是假设utf8,然后使用文本和文本icu包对编码进行正确处理。不幸的是,我这里的文件不是utf8.Ok。如果我事先不知道输入文件中需要什么语言环境,是否也可以过滤掉这些字符?一个好的选择是假设utf8,然后使用文本和文本icu包对编码进行正确处理。不幸的是,我这里的文件不是utf8.Ok。如果我事先不知道输入文件中需要什么语言环境,是否也可以过滤掉这些字符?一个好的选择是假设utf8,然后使用文本和文本icu包对编码进行正确处理。不幸的是,我这里的文件不是utf8.Ok。如果我事先不知道输入文件中需要什么语言环境,是否也可以过滤掉这些字符?一个好的选择是假设utf8,然后使用文本和文本icu包对编码进行正确处理。不幸的是,我这里的文件不是utf8。我只会保留任何小于128的字符,并替换其他一切。这应该适用于utf-8、ISO-8859-*和其他一些单字节编码。一种更稳健的方法可能是使用一些启发式方法来预先猜测编码。我只会保留任何小于128的字符,并替换所有其他字符。这应该适用于utf-8、ISO-8859-*和其他一些单字节编码。一种更稳健的方法可能是使用一些启发式方法来预先猜测编码。我只会保留任何小于128的字符,并替换所有其他字符。这应该适用于utf-8、ISO-8859-*和其他一些单字节编码。一种更稳健的方法可能是使用一些启发式方法来预先猜测编码。我只会保留任何小于128的字符,并替换所有其他字符。这应该适用于utf-8、ISO-8859-*和其他一些单字节编码。一种更稳健的方法可能是使用一些启发式方法来预先猜测编码。