gpt4 book ai didi

c++ - 如果 TECGetTextEncodingFromInternetName() 需要 Pascal 风格的字符串,为什么 CopyCStringToPascal() 在 OSX 10.5 中停用了?

转载 作者:行者123 更新时间:2023-11-28 03:48:10 26 4
gpt4 key购买 nike

我有责任为 OSX 10.5 构建一个旧版本的开源库。 (库是 Xerces 2.8。)

库无法在 OSX 10.5 上开箱即用地构建(除其他外)由于使用了已停用的 OSX 函数 CopyCStringToPascal()。相关代码片段是:

Str255 pasEncodingName;
...
CopyCStringToPascal(cEncodingName, pasEncodingName);
TECGetTextEncodingFromInternetName (&textEncoding, pasEncodingName);

调查表明,CopyCStringToPascal() 确实将 C 字符串转换为 Pascal 风格的字符串(第一个字节提供字符串中字符数的字符串)。因此,从上下文来看,很明显 TECGetTextEncodingFromInternetName() 的第二个参数必须是 Pascal 风格的字符串(尽管我无法在任何来自互联网的文档中找到这一点)。

因为最新版本的开源库 (Xerces 3.1) 成功构建在 OSX 10.5 上,并且其实现都明确定义了函数 CopyCStringToPascal()(因为它已在 OSX 10.5 中停用) 来创建 Pascal 风格的字符串,并继续使用 TECGetTextEncodingFromInternetName()(在 OSX 10.5 中尚未停用),我相信这可以确认确实 TECGetTextEncodingFromInternetName() 即使对于 OSX 10.5 也继续需要 Pascal 风格的字符串。

因为当前 OSX 10.5 系统例程仍然需要 Pascal 风格的字符串,所以我很困惑为什么转换为这种必要的 Pascal 字符串的函数 CopyCStringToPascal() 在操作系统 10.5。我写这个问题是为了进一步确认我没有犯错误,只是简单地为 Xerces 2.8 显式定义此函数(并且在与此讨论相关的代码区域中不做任何更改)以使 Xerces 2.8 到使用 OSX 10.5 构建。谢谢。

最佳答案

一共有三个升级路径,都是通过CFString。

Grady Player 已经建议,第一个是使用 CFString 将编码名称转换为 Pascal 字符串。您可以从 CFString 中的编码名称开始(使用 CFSTR 宏);如果没有,您可以从 C 字符串创建一个 CFString,并从 CFString 创建一个 Pascal 字符串。

第二种是使用 CFString 而不是 Text Encoding Conversion Manager 将编码名称转换为编码标识符。 CFString 和 TEC 都使用相同的标识符(比较 CFStringEncodingExt.h 和 TextCommon.h 之间的常量),因此您可以使用 CFStringConvertIANACharSetNameToEncoding(将编码名称作为 CFString)来获取编码标识符。如果您将编码标识符从 CF 传递给 TEC,这有点作弊,但只要 Apple 认为不适合无缘无故地更改所有常量,它就会起作用。

第三种是使用 CFString 本身进行转换。使用 CFStringCreateWithBytes 从输入创建一个 CFString,并使用 CFStringGetBytes 确定输出长度,然后再次执行转换。该解决方案完全去除了 TEC。

虽然 TEC 本身尚未弃用(但),如果它需要使用或重新发明其他已弃用/删除的 API 才能使其正常工作,这对于基于 TEC 的代码的生命周期来说也是一个不好的迹象。我建议 filing a bug要求在 TEC 中为 TECGetTextEncodingFromInternetName 提供现代替代品;您可以根据对请求的响应来决定要做什么。

关于c++ - 如果 TECGetTextEncodingFromInternetName() 需要 Pascal 风格的字符串,为什么 CopyCStringToPascal() 在 OSX 10.5 中停用了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713844/

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