2017-06-05 5 views
0

現在、私は韓国語のプログラムに取り組んでいます。これは中国語に翻訳する必要があります。私が奇妙に感じたことは、アプリケーションがUTF-8とUTF-16の文字を混ぜていることです。UTF-8とUTF-16を混ぜる

のは、私たちが行くと、文字列きたとしましょう:

"게임을 정말로 종료하시겠습니까" 
8C AC 84 C7 44 C7 20 00 15 C8 D0 B9 5C B8 20 00 
85 C8 CC B8 58 D5 DC C2 A0 AC B5 C2 C8 B2 4C AE 00 

しかし、ちょうどゼロを防ぐために

B0 D4 C0 D3 C0 BB 20 C1 A4 B8 BB B7 CE 20 C1 BE 
B7 E1 C7 CF BD C3 B0 DA BD C0 B4 CF B1 EE 3F 00 

として格納されていますが。私はそれが何らかの暗号化であるかどうか知りたいのですが、文字列の途中の文字列の終わりを防ぐためにコンパイラが使う通常の方法ですか?なぜなら、最終結果は私が言及した最初の文字列です。どんな読書も強く感謝されます。

+0

http://utf8everywhere.org/ –

+2

それは昔マルチバイトエンコーディングを使用し、バイト値は、[コードページ949](https://en.wikipedia.org/wiki/に一致している参照してくださいCode_page_949)。 –

+0

@HansPassantこのエンコーディングを通常のUTF-16文字列に変換する際のヒントを教えてください。 – mexikanoZ

答えて

1

文字列は、uft-8またはutf-16(またはその他のエンコーディング)である必要があります。文字列にエンコーディングを混在させるとエラーになります。しかし、文字列をutf-8として渡すことは非常に一般的であり、Windows関数によって必要とされる場合にのみutf-16に変換します。これにはいくつかの理由があり、Basile Starynkevitchがリンクを提供しています。

UFT-8を読むためのルーチンが必要な場合は、ここにいくつかあります。

https://github.com/MalcolmMcLean/babyx/blob/master/src/common/BBX_Font.c

+0

文字列はUTF-8ですが、UTF-16文字はUTF-8(ゼロなし)に変換されています。これは私の質問が実際に始まる場所です。例として、いくつかの例を挙げます:(54448)B0 D4 - >(44172)[ge] 8C AC | (54704)B0 D5→(44176)[겐] 90 AC | (54960)B0 D6 - >(44180)[ゲル] 94 AC。私はそれが何らかの種類の暗号化であるかどうか、またはそれをエンコードすることだけではわかりません。 – mexikanoZ

+0

@mexicanoZ UTF-8にゼロがないと言っている理由がわからない。 UTF 8は00を00としてエンコードします。ゼロは削除されません。それはそれらを保存します。 –

+2

UTF-8には文字列内にゼロバイトがありません。コードポイント0であるヌルバイトを除いて、C言語の言語では、文字列の終わり。 –