如何使用 fscanf 读取 UTF-8 编码

Posted

技术标签:

【中文标题】如何使用 fscanf 读取 UTF-8 编码【英文标题】:How to read UTF-8 encoding with fscanf 【发布时间】:2019-12-27 22:56:18 【问题描述】:

Octave 4.2.2 使用fscanf 命令读取ISO-8859-1 字符(格式化为读取空格):

foo = fscanf(foofile1, "%*s %[^\n]");

fgetl 读取原生UTF-8

foo = fgetl(foofile2);

两个文件都显示为UTF-8

$ file -i foofile1.csv 
foofile1.csv: text/plain; charset=utf-8

$ file -i foofile2.html
foofile2.html: text/html; charset=utf-8

有没有什么办法可以用fscanf读取UTF-8格式的HTML文件?

更新:正如@TS 所指出的,这已被报告为savannah.gnu.org 中的一个错误。

【问题讨论】:

这个解决方法是否提到here 工作:deal(textscan(foofile1, "%*s %[^\n]"):); 同样的结果,@TS,它不是以 UTF-8 格式读取的。 您能否提供具有预期输出的最小示例(ANSI 和 utf8)? 【参考方案1】:

无需更改代码。 UTF8 旨在与上述大多数不支持 UTF8 的单字节字符串函数一起使用,只要您不必使用解码的代码点,例如将字符串打印到屏幕上。

【讨论】:

但这两个文件的读取方式不同。特殊字符(如 Á)使用单个十六进制代码 (ISO-8859-1) 或两个十六进制代码 (UTF-8) 读取,具体取决于使用的命令。 对不起,我以为那是标准的 C 函数 fscanf。

以上是关于如何使用 fscanf 读取 UTF-8 编码的主要内容,如果未能解决你的问题,请参考以下文章

如何让fscanf自动在文件读结束时候停止执行

使用 fscanf 读取逗号分隔的双精度

C中的fscanf - 如何确定逗号?

matlab如何正确读取utf-8编码的txt文档

如何在 Scala 或 Java 中读取具有混合编码的文本文件?

C语言文件读取fscanf(),该怎么处理