gpt4 book ai didi

csv - 木薯无法识别带有变音符号的命名字段

转载 作者:行者123 更新时间:2023-12-05 01:25:53 25 4
gpt4 key购买 nike

我正在尝试解析包含德语文本的 CSV 文件,即它不是以“逗号”分隔,而是以分号分隔,并且可能包含变音符号(äöü 等)。

使用 Cassava并关注链接 tutorial ,对于标题包含元音变音的列,我收到错误:

parse error (Failed reading: conversion error: no field named "W\228hrung") at "\nEUR;0,99"

MRE:

{-# LANGUAGE OverloadedStrings, TypeApplications #-}

import Data.Char
import qualified Data.ByteString.Lazy as ByteString
import Data.Csv
import Data.Text

myOpts = defaultDecodeOptions {
decDelimiter = fromIntegral (ord ';')
}

data Transaction = Tx
{ waehrung :: Text
, betrag :: Text
} deriving Show

instance FromNamedRecord Transaction where
parseNamedRecord m =
Tx
<$> m .: "Währung"
<*> m .: "Betrag"

main :: IO ()
main =
ByteString.readFile "bank.csv"
>>= print . decodeByNameWith @Transaction myOpts

将其保存为 bank.csv:

Währung;Betrag
EUR;14,12
EUR;0,99

版本:GHC 8.10.7木薯^>=0.5.2.0

最佳答案

你需要写:

import qualified Data.Text.Encoding as Text
instance FromNamedRecord Transaction where
parseNamedRecord m =
Tx
<$> m .: Text.encodeUtf8 "Währung"
<*> m .: "Betrag"

问题是 cassava 在内部将字段名称表示为文本的 UTF-8 编码的 ByteString。但是,用于将字符串文字编码为 ByteStringByteStringIsString 实例使用UTF-8 编码,而是将每个字符编码为其代码点的最低有效字节(这基本上从不您想要的非 ASCII 字符串)。

关于csv - 木薯无法识别带有变音符号的命名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70645130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com