2016-12-20 16 views
0

私は一連の文字列を持つバイト配列を持っています。バイト配列のUnicodeの解析

[47] = 0x01 
[48] = 0x03 
[49] = 0x00 
[50] = 0x00 
[51] = 0x73 
[52] = 0x65 
[53] = 0xc3 
[54] = 0xb1 
[55] = 0x6f 
[56] = 0x72 
[57] = 0x00 
[58] = 0x00 
[59] = 0x00 
[60] = 0x4f 
[61] = 0x08 
[62] = 0x00 
[63] = 0x08 
[64] = 0x00 
[65] = 0x00 
[66] = 0x04 
[67] = 0x13 
[68] = 0xff 
[69] = 0xff 
[70] = 0x00 
[71] = 0x00 

私は、文字列を持っていると信じて:1の場合では、私は31に

[28] = 0x6e 
[29] = 0x61 
[30] = 0x6d 
[31] = 0x65 
[32] = 0x00 
[33] = 0x00 
[34] = 0x00 
[35] = 0x4f 
[36] = 0x08 
[37] = 0x00 
[38] = 0x07 
[39] = 0x00 
[40] = 0x00 
[41] = 0x04 
[42] = 0x13 
[43] = 0xff 
[44] = 0xff 
[45] = 0x00 
[46] = 0x00 

28は、そのセクションが続い素子32に終了すると、私は別のバイト配列を持つ文字「name」を持っていseñor

最初の配列では、00を最初の4バイトとして名前を見つけるのは簡単ですが、2番目のバイト配列で何を解読するのですか?

両方のアレイは、vector<char>です。

+0

[UTF-8](https://en.wikipedia.org/wiki/UTF-8)エンコーディングを使用しているようです。 –

+0

ユニコードとは? UTF16、UTF8? BTW C++ 11以降にはutf16のリテラルがあるので、何かを解析する必要はありません。バイト28-31が 'name'の場合、おそらくUTF8を使用します。いずれにせよ、C++ *のUTF8文字列は* std :: stringです –

+0

@PanagiotisKanavos - 名前が2バイト目の配列でどこで終わるかを知る方法は? – ruipacheco

答えて

1

テキストは明らかにUTF-8エンコーディングを使用している:

[53] = 0xc3 
[54] = 0xb1 

これはUTF-8 encodedñ文字です。そして周囲の文字は残りの4文字がseñorにあります。

C++ライブラリには、working with UTF-8の機能がいくつかあります。私はいつもそれらのライブラリクラスがやや厄介で柔軟性がないと感じました。ほとんどのプラットフォームでは、UTF-8と他のエンコーディングの間で変換するためのシンプルで簡単なAPIを備えた優れた柔軟性のあるiconv libraryがあります。

+0

ユニコード文字列がバイト配列でどこで終了するのかをどのように知ることができますか? – ruipacheco

+0

文字列がどこから来たのか、どの文字列がそれらを作成するのかを理解する。個々のバイトが "これは文字列の終わりです"と言われる首の周りに掛かるという兆候はありません。 Cスタイルの文字列では、 ''\ 0' 'バイトで終了します。これらがCスタイルの文字列であれば、その方法を見つけることができます。 –