OS_TRANSLATE_LMBCS_TO_UNICODE问题

时间:2012-04-11 10:39:31

标签: lotus-notes lotus

我正在使用OSTranslate将我的邮件正文内容转换为Unicode字符串。哪个适用于char *,然后WORD大小为65535。

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

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

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

1 个答案:

答案 0 :(得分:0)

我提出的一种方法是if(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收到的最后一个指针再次开始计数,并继续循环,直到你运行整个输入缓冲区。