どのようなマルチバイト文字セットが0x7Fので始まり、4バイト長のですか?

StackOverflow https://stackoverflow.com/questions/680495

  •  22-08-2019
  •  | 
  •  

質問

私は適切に中国語の文字を表示するために、いくつかのレガシーコードを取得しようとしています。一つの文字エンコーディング私は0x7Fを持つ開始で動作するようにしようと(0x7Fをバイトを含む)4バイト長ですよ。で、どこで、私はそれのための情報を見つけることができ、これを符号化するどのような人を知っていますか?おかげで..

UPDATE: 私はまた、0xE3ですべての文字を開始し、3バイトの長さで、いくつかの日本のエンコーディングで動作しなければなりませんでした。それは私がWindowsで日本語ロケールを選択した場合、しかし、それは私たちのアプリケーションで正しく表示されません適切に自分のコンピュータ上で表示されます。日本語以外の他のロケールが選択されている場合は、私もきちんとファイル名を表示することはできません。だから私はこのエンコーディングがUnicodeではありません推測しています。誰もがそれが何であるかを知っていますか?それはANSIですか?それはシフトJISですか?

中国の1のために、私は、UnicodeとUTF-8文字でそれをテストしていると私は同じパターンを取得しています。 0x7Fのは3つのバイトが続きます。 UnicodeとUTF-8は同じですか?

役に立ちましたか?

解決

  

私は0x7Fを持つ開始と連携し、しようとしている一つの文字エンコーディングがある4バイト長

他のバイトは何ですか?あなたはこのエンコーディングで任意のラテン語のテキストを持っていますか?

それは「0x7fの0xの... $ 00 $ 00」あなたはUTF-32LEを見ているなら。また、文字2 UTF-16(LEのいずれかまたはBE)とすることができる。

ほとんどの東アジアのエンコーディングは、非ASCII文字のリードバイトとして0x80-0xFFを使用します。 ASCII以外は削除として、私はそのことを知っている誰も有数から0x7Fを使用しないだろうがあります。

ETAます:

  

バイトオーダーマークがあるようになっている?

エンコーディングが「UTF-32LE」(それはあなたに到達する前に失われる可能性が1)であることを知らせるのアウトオブバンド方法がある場合はBOMがあるように必要はありません。

  

私はまた、0xE3ですべての文字を開始し、3バイトの長さで、いくつかの日本のエンコーディングで動作するように持っていた。

これは確かにUTF-8です。シーケンス0xE3の0xは... 0X ...どこひらがな/カタカナのライブである、U + 3000とU + 4000の間の文字になります。

  

これは、私がWindowsで日本語ロケールを選択した場合、しかし、それは私たちのアプリケーションで正しく表示されません適切に自分のコンピュータ上で表示されます。

そして、まだ「A」「W'-接尾ものの内部のWin32インターフェースの(*)のバージョンを使用して、アプリケーションが非Unicode対応のアプリ残念大群の一つである可能性があります。あなたはその本当のエンコーディングに応じて文字列に読み込むことができるかどうかは議論の余地がある:非Unicode対応のアプリは西洋ロケールに東アジアの表意文字を表示することができません。

(*:ロケールを変更すると、それに影響を与えた理由です「システムのコードページが現時点でに設定されているものは何でも」のWindowsの誤解を招く用語である、「ANSI」にちなんで命名。)

ETA(2):

OK、それを割れました。それは私が前に会った任意の標準化されたエンコーディングではありませんが、あなたはUnicodeコードポイントがエンコードされているという前提を前提とした場合には、解読するのは比較的簡単です。

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

Unicodeエスケープでエンコードされた文字は、A、B及びCのキー列にインデックスを取り、一緒に加算することによって計算することができます:

A*0x1000 + B*0x40 + C

つまり、ベース64文字セットだが、それは通常のBase64標準ではありません、です。少し実験は、のキーの文字列を与えます:

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

「」と「_」文字あなたがそれらを使用しています掲載文字のいずれもいるので、推測しています。私たちは、正確な文字列を見つけるために、より多くのデータを必要と思います。

ですから、例えばます:

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

ETA(3):

ええ、手動で各コードポイントを吸引し、文字として参加することにより、ネイティブのUnicode文字列を作成するために簡単なはずです。ない非常にあなたが使用しているが、任意のUnicode対応プラットフォームは、単純に(そして、できればUTF-16LEのバイトに手動で再エンコードすることなく)コードポイントから文字列を作ることができるはずですどんなプラットフォーム上で利用できるか分からます。

私はそれが3例の文字が同じ一般的な範囲で最初のエスケープ文字を持っていたし、彼らのUnicodeのコードポイントと同じ番号順にすることを注目してUnicodeのコードポイントである必要があります考え出しました。他の2つの文字がランダムに変化するように見えたので、それは非常に可能性の高いコードポイントのビッグエンディアンエンコーディングし、おそらく6等の塩基-64エンコーディングは、あなたが読めるASCIIから抜け出すことができますできるだけ多くのビットである。

標準のBase64自体は、基本多言語面であることをあまりにも遠くまで数字で始まるものを置くの文字で始まります。だから私は「0123456789ABCDEFG ...」キー文字列の他の当然の選択だろうと推測し始めました。それは与えられた文字のコードポイントに近かったが、少し低すぎる数値を結果として得ました。キー文字列の先頭に余分な文字を挿入する(その数字「0」の数を0にマップされません)右の文字と非常に近い他の二つの1つを得ました。右これだけ変更するには、何の小文字を持っていなかった1小文字は、私は、上下ケースの間に別の文字を挿入します。これは、右の数字を思い付います。

実際には右ですが、(離れて挿入された文字の任意の選択から)、それはそれである可能性が非常に高いのですが保証はない。

他のヒント

あなたはWikipediaでのページをコード漢字で見たいと思うかもしれません。私はそれを見ることができることが唯一のエンコーディングは常に4バイトである UTF-32 のます。

GB 18030 には、現在の標準中国語の文字セットであるが、それは1〜4とすることができバイト長ます。

chardet を試してみてください。それはバイトの文字列の文字コードを推測するのに良い仕事をしています。

  

はUnicodeとUTF-8と同じ?

はありません。 UTF-8は、バイトのシーケンスとしてUnicode文字を表現するひとつの方法です。 Unicodeは、各文字に数値と人間が読める識別子を割り当てるだけでなく、文字に関するメタデータの多くは、完全な標準である。

このようなUTF-8やUTF-16サロゲートペアとして有効なユニコード符号化を、可能性があります。

はい、中国の一つはUTF-8、実装(符号化)のUnicodeです。 UTF-8は、ASCII文字のために、他のために4バイトまでの1バイトの長さである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top