Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml ByteString编码检测_Xml_Haskell - Fatal编程技术网

Xml ByteString编码检测

Xml ByteString编码检测,xml,haskell,Xml,Haskell,作为练习,我想编写一个XML解析器(我知道有很多非常好的库,但我想自己试试)。我知道对于任何足够大的xml文件,ByteString.Lazy可能是最好的选择,因为在内存中,普通字符串是unicode点的列表。我的问题是:我应该使用Data.Text.Lazy.Encoding.decodeUtf8With作为预处理器还是直接将编码检测传递给解析器?这是一个棘手的问题。。。。XML文档的编码在文档本身(在处理指令中)中指定。这显然导致了一个鸡和蛋的问题,这里描述了- 因此,如果您想正确地执行操作

作为练习,我想编写一个XML解析器(我知道有很多非常好的库,但我想自己试试)。我知道对于任何足够大的xml文件,
ByteString.Lazy
可能是最好的选择,因为在内存中,普通字符串是unicode点的列表。我的问题是:我应该使用
Data.Text.Lazy.Encoding.decodeUtf8With
作为预处理器还是直接将编码检测传递给解析器?

这是一个棘手的问题。。。。XML文档的编码在文档本身(在处理指令中)中指定。这显然导致了一个鸡和蛋的问题,这里描述了-

因此,如果您想正确地执行操作,您首先必须弄清楚如何读取文档的第一行(是每个字符一个字节还是两个字节),然后读取它,然后使用正确的编码读取其余文本。幸运的是,第一行将是32-127范围内的字符,这使事情变得更简单


如果是我,并且我是作为一个学习练习来做这件事的,我只会将doc限制为utf8。。。。(这里的细节只是管道)。

这是一个棘手的问题。。。。XML文档的编码在文档本身(在处理指令中)中指定。这显然导致了一个鸡和蛋的问题,这里描述了-

因此,如果您想正确地执行操作,您首先必须弄清楚如何读取文档的第一行(是每个字符一个字节还是两个字节),然后读取它,然后使用正确的编码读取其余文本。幸运的是,第一行将是32-127范围内的字符,这使事情变得更简单


如果是我,并且我是作为一个学习练习来做这件事的,我只会将doc限制为utf8。。。。(这里的细节只是管道)。

虽然这是一个非规范性附录(也就是说,允许您以另一种方式进行操作),但仍规定了如何进行此操作


在这里复制算法是多余的,因此我建议只按照上面的链接进行操作。

虽然这是一个非规范性附录(即允许您以另一种方式进行操作),但还是指定了如何执行此操作


在这里复制算法是多余的,因此我建议只遵循上面的链接。

我知道这一点。我只是想知道,如果我自己做非标准检测,或者让库来做,我的效率是否会提高很多。例如,如果输入是UTF-16,那么
decodeUtf8With
就帮不了你。您可以使用标准中的算法来确定输入是什么,然后在对解码的
文本运行解析器之前,将
解码\uuuuuuuu与
函数一起使用。我认为将编码作为一个单独的步骤来处理将导致更干净的核心解析器。谢谢。我想查看第一个字节并将编码声明捕获为[Char]字符串不会花费太多。至于非unicode编码,我只希望Data.Text.ICU不会导致内存使用呈指数增长。我知道这一点。我只是想知道,如果我自己做非标准检测,或者让库来做,我的效率是否会提高很多。例如,如果输入是UTF-16,那么
decodeUtf8With
就帮不了你。您可以使用标准中的算法来确定输入是什么,然后在对解码的
文本运行解析器之前,将
解码\uuuuuuuu与
函数一起使用。我认为将编码作为一个单独的步骤来处理将导致更干净的核心解析器。谢谢。我想查看第一个字节并将编码声明捕获为[Char]字符串不会花费太多。至于非unicode编码,我只希望Data.Text.ICU不会导致内存使用呈指数增长。