0

我正在使用 OSTranslate 将我的邮件正文内容转换为 Unicode 字符串。对于小于 WORD 大小 65535 的 char* 来说,这可以正常工作。

WORD Length = MAXWORD;
actualOutLength = OSTranslate(OS_TRANSLATE_LMBCS_TO_UNICODE, (char*)inPtr,
Length, (char*)outPtr, Length);

转换后,输出数组仅包含源字符串的一部分。

请建议设置大小的正确方法是什么,因为我的输入字符串大小超过了 MAXWORD 大小限制。

4

1 回答 1

0

我想出的一种方法是,如果 (MAXWORD-actualOutLength<4) 然后获取输出缓冲区并使用 OS_TRANSLATE_UNICODE_TO_LMBCS 进行反向转换。您将丢弃此结果——但返回的长度是已处理的原始输入缓冲区部分的长度。因此,您可以使用该长度来推进您的 inPtr,再次使用 OS_TRANSLATE_LMBCS_TO_UNICODE 再次调用 OSTranslate 并继续在循环中构建扩展输出缓冲区,直到您耗尽输入缓冲区。请注意,这仅在您的输入字符串针对第 1 组进行了 LMBCS 优化时才有效。如果它针对不同的组进行了优化,则反向翻译长度可能与输入缓冲区中的字符不一致。

另一种方法是在循环中使用 NLS_get 来计算输入缓冲区中最多为 MAXWORD/2 的字符。然后,您可以在输入缓冲区的第一部分使用 NLS_translate 或 OSTranslate,并确保输出适合 MAXWORD。然后从您从 NLS_get 收到的最后一个指针重新开始计数,并继续循环,直到您运行完整个输入缓冲区。

于 2012-04-11T11:24:45.773 回答