Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
如何规范化.NET和Mono OSX之间的变音字符串表示?_.net_Macos_Unicode_Mono_Diacritics - Fatal编程技术网

如何规范化.NET和Mono OSX之间的变音字符串表示?

如何规范化.NET和Mono OSX之间的变音字符串表示?,.net,macos,unicode,mono,diacritics,.net,Macos,Unicode,Mono,Diacritics,我有一个跨平台的应用程序,在Windows上使用.NET,在Mac/OSX上使用Mono 我的应用程序处理文件名,并将序列化数据结构写入磁盘,其中包含作为字符串的文件名。其中一些文件名具有国际字符,如重音符号 当我将在Windows(NTFS)上创建的数据文件复制到Mac时,名称中包含这些国际重音字符的文件会出现一些问题 从NTFS读取并由.NET序列化的文件名包含重音字母的单个字符,但是当我在OSX上使用Mono从文件系统读取文件名时,我得到的是两个字符的表示形式,与序列化的表示形式不匹配。我

我有一个跨平台的应用程序,在Windows上使用.NET,在Mac/OSX上使用Mono

我的应用程序处理文件名,并将序列化数据结构写入磁盘,其中包含作为字符串的文件名。其中一些文件名具有国际字符,如重音符号

当我将在Windows(NTFS)上创建的数据文件复制到Mac时,名称中包含这些国际重音字符的文件会出现一些问题

从NTFS读取并由.NET序列化的文件名包含重音字母的单个字符,但是当我在OSX上使用Mono从文件系统读取文件名时,我得到的是两个字符的表示形式,与序列化的表示形式不匹配。我需要在Windows和Mac上保持序列化文件名与实际文件系统之间的一致性

例如,字母é是在Windows上使用.NET从文件名中获取的,并被序列化为整数值为233的单个字符。在OSX上,我使用Mono读取复制文件的文件名,该字母由两个整型字符101和769表示,它们将字母和重音表示为不同的字符。问题是,此表示形式与在Windows上编写的序列化表示形式不匹配

我需要找到一些方法来加强一致性——要么在包含文件名的序列化数据结构中,要么在文件名本身中

在.NET/Mono中是否有某种方法可以规范化这些不同的字符串表示形式?我查看了Normalize()方法,但我认为它不能满足我的要求。要么是这样,要么我不理解文档

NTFS是否也可以使用重音字母的两个字符表示来存储文件名?若然,当局会否视这两种表述为不同的?我可能更喜欢对实际文件名本身进行规范化


先谢谢你

我认为问题在于Windows和Mac OS X使用不同的系统来编码文件名中的字符

根据,NTFS使用UTF-16存储文件名。然而,根据所述,Mac OS X通过规范化形式D使用UTF-8存储文件名,其中字形“é”被“规范化分解”为“e”(101)和组合的锐重音符号“')(769)


因此,我担心除非您将文件名限制为纯ASCII,否则它们在两个操作系统上的表示形式将不同。

这实际上就是String.Normalize()所做的。String.Normalize()为我解决了一个类似的问题。顺便提一句,我原以为我对Unicode了解很多,但只了解了这一点“规范分解”业务,当考虑回答这个问题。生活和学习!