gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:13:20 24 4
gpt4 key购买 nike

我有一个跨平台的应用程序,它使用 .NET for Windows 和 Mono for Mac/OSX。

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

当我将在 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 使用不同的系统对文件名中的字符进行编码。

根据 the first answer to this SO question , NTFS 使用 UTF-16 存储文件名。然而,根据the second answer to this SO question ,Mac OS X 通过规范化形式 D 使用 UTF-8 存储文件名,其中字形“é”被“规范地分解”为“e”(101)和组合重音符号“´”(769)。

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

关于.net - 如何规范化 .NET 和 Mono OSX 之间的变音符号字符串表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com