0

バックグラウンド:

私はWebアプリケーションのレガシーコードに取り組んでおり、現在、コードのASCII部分の一部をUNICODEに変換しています。ロガーで次のバグに遭遇しました。文字列リテラルが作成されたか、何らかの理由で途中で破損したようです。

次の文字列の例-"%s::%s - Started with success."メモリ内では次のようになります。

2AF9BFC   25 00 73 00 3A 00 3A 00  %.s.:.:.
02AF9C04  25 00 73 00 20 00 2D 00  %.s. .-.
02AF9C0C  20 00 53 00 74 00 61 00   .S.t.a.
02AF9C14  72 00 74 00 65 00 64 00  r.t.e.d.
02AF9C1C  20 00 77 00 69 00 74 00   .w.i.t.
02AF9C24  68 00 20 00 73 00 75 00  h. .s.u.
02AF9C2C  63 00 63 00 65 00 73 00  c.c.e.s.
02AF9C34  73 00 2E 00 00 00 00 00  s.......
02AF9C3C  00 00 00 00 00 00 00 00  ........

ログでは、文字列は次のようになります。

ここで学んだことから、文字列をUnicodeに置き換える_Tマクロを使用します。

バイト0のプレフィックスを取得するのはなぜですか?

4

1 に答える 1

1

Microsoftの用語では、「Unicode」はUTF-16を意味します。つまり、各文字は1つまたは2つの16ビットコードユニットで表されます。ASCII文字がUTF-16に変換されると、上位バイトがゼロで下位バイトがASCII文字を含む単一のコードユニットとして表されます。

ログファイルをASCIIとして読み取り可能にする場合は、テキストを書き出すときにテキストをUTF-8に変換する必要があります。それ以外の場合は、ログファイル内のすべてのテキストがUTF-16であることを確認し、UTF-16を理解するログファイルリーダーを使用しますが、テキストの大部分がASCIIの場合(毎秒以降)、最大50%のスペースを浪費することに注意してください。バイトは0になります)。

于 2012-10-25T10:09:37.413 に答える