比较八度中具有不同编码的文件名

问题描述

我正在尝试在Octave中完成以下任务:

  1. 从文本文件读取文件
  2. 在硬盘上的特定位置搜索文件

我的脚本适用于大多数文件,但是对于某些包含Unicode字符的文件,我无法将文本文件中的文件名与文件系统中出现的文件名进行匹配。

文本文件中的文件名采用UTF-8编码,我使用函数fgetl()在Octave中读取它们。 文件系统中的文件名通过函数readdir()获得。我在Windows NTFS文件系统上。

例如,一个有问题的文件名包含字符“Č”。

在八度控制台中打印出来时,字符看起来完全一样。但是,十六进制查看器显示字符实际上并不相同。在第一种情况下,字符编码为0x010C,在第二种情况下,字符编码为0x0043 + 0x030C。当然,通过strcmp()比较它们两者都失败了。

我试图做的是从文件名中忽略所有非ASCII字符,然后进行比较。但这没有用,可能是因为在第二个变体中,字符的第一部分(0x0043)实际上是ASCII。

现在,我正在寻找一种将一种格式转换为另一种格式以进行比较的方法。有什么想法吗?

编辑: 正如我稍后发现的那样,Windows上文件名中的字符Č实际上被写为C + ˇ,这是您可以写该字符的另一种方式。因此,区别可能不是编码标准,而是以2种不同的方式实现1个可见字符(字形)。

然后,这个问题基本上变为匹配“一次”写的字符和相应的字母+组合字符对的任务。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)