0

メール本文のコンテンツを Unicode 文字列に変換するために OSTranslate を使用しています。これは、WORD サイズ 65535 未満の char* で正常に機能しています。

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

変換後、出力配列にはソース文字列の一部のみが含まれます。

入力文字列のサイズが MAXWORD サイズ制限を超えているため、サイズを設定する正しい方法を提案してください。

4

1 に答える 1

0

私が思いついた1つの方法は、(MAXWORD-actualOutLength <4)の場合、出力バッファーを取得し、OS_TRANSLATE_UNICODE_TO_LMBCSを使用して逆変換を実行することです。この結果は破棄されますが、返される長さは、処理された元の入力バッファーの部分の長さです。したがって、その長さを使用してinPtrを進め、OS_TRANSLATE_LMBCS_TO_UNICODEを使用してOSTranslateを再度呼び出し、入力バッファーがなくなるまでループで拡張出力バッファーを構築し続けることができます。これは、入力文字列がグループ1用に最適化されたLMBCSである場合にのみ機能することに注意してください。別のグループ用に最適化されている場合、逆変換の長さは入力バッファー内の文字と一致しない可能性があります。

もう1つの方法は、ループ内でNLS_getを使用して、MAXWORD/2までの入力バッファー内の文字をカウントすることです。次に、入力バッファーの最初の部分でNLS_translateまたはOSTranslateのいずれかを使用して、出力がMAXWORD内に収まるようにすることができます。次に、NLS_getから受け取った最後のポインターから再度カウントを開始し、入力バッファー全体を実行するまでループを続けます。

于 2012-04-11T11:24:45.773 に答える