问题描述
我正在尝试在Octave中完成以下任务:
我的脚本适用于大多数文件,但是对于某些包含Unicode字符的文件,我无法将文本文件中的文件名与文件系统中出现的文件名进行匹配。
文本文件中的文件名采用UTF-8编码,我使用函数fgetl()在Octave中读取它们。 文件系统中的文件名通过函数readdir()获得。我在Windows NTFS文件系统上。
在八度控制台中打印出来时,字符看起来完全一样。但是,十六进制查看器显示字符实际上并不相同。在第一种情况下,字符编码为0x010C,在第二种情况下,字符编码为0x0043 + 0x030C。当然,通过strcmp()比较它们两者都失败了。
我试图做的是从文件名中忽略所有非ASCII字符,然后进行比较。但这没有用,可能是因为在第二个变体中,字符的第一部分(0x0043)实际上是ASCII。
现在,我正在寻找一种将一种格式转换为另一种格式以进行比较的方法。有什么想法吗?
编辑: 正如我稍后发现的那样,Windows上文件名中的字符Č实际上被写为C + ˇ,这是您可以写该字符的另一种方式。因此,区别可能不是编码标准,而是以2种不同的方式实现1个可见字符(字形)。
然后,这个问题基本上变为匹配“一次”写的字符和相应的字母+组合字符对的任务。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)