たとえば「ñ」に変換するために、charテーブルへのUTF8ビットはどこにありますか?

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

質問

私はウェブを徹底的に見てきましたが、そのような変換でテーブルを見つけることができないようです。私が見つけたものにはいくつかの間違いがあり、信頼性が高くないので、私は公式のテーブルなどを探しましたが、残念ながら私はそうではありません。

タイトルで述べたように、私がやりたいことは、たとえば、「â±」が何を表しているのかを知っていることです(これは私がすでに知っている..「ñ」)、スペイン語のキャラクターだけでなく、他の人(私はすでに知っていますポーランドのもの)。

主な問題は、たとえば「eñe」(それは大丈夫)などのように時々来るかもしれないPHPに文字列を持っていることです。それは読みやすい..しかし、それが大丈夫なら、私はそれを変更したくない。これを行うために、私はutf8_decode関数を使用していましたが、文字列が読み取り可能な場合でも、「ñ」を「■」(しかし白)に変更します。 MB_DETECT_ENCODING関数を使用すると、常に「UTF-8」を回答として取得します。

たとえば「ñ」の「 ´±」、「 "の"Å「」などと書かれたすべてのutf8ビットcharが書かれたら、基本的に次のように置き換える関数を実行する予定です。 UTF8_DECODEが行うのと同じことです。ここの誰かがより良い解決策を持っていない限り!

前もって感謝します!ご挨拶!

役に立ちましたか?

解決

なぜこれをしたいのですか?破損したデータなどを回復しますか?

そうすべき 本当 通常のビジネスコードフローの一部として行われません。必要なのは、WebAppのすべてのレイヤーがUTF-8を適切に使用していることを確認することです。 PHPソース、HTTP応答ヘッダーとボディ、DBテーブル、DB接続、ET CETETERA。参照してください PHP UTF-8チートシート.

もし、あんたが 実際に これを破損したデータを回復するための1回限りのタスクとして実行したい場合は、質問の破損したデータが、ISO-8859-1として誤って保存または表示されているUTF-8データを示していることを知っておくと良いことです。データをISO-8859-1として読み取り、UTF-8として書くだけです。一度。その後、正しい方法で行います。

証拠として、 ñ (Unicode文字「ラテン語の小さな文字n with tilde」(u+00f1))Unicode(UTF-8, 、バイトのマルチバイトエンコード) 0xC30xB1. 。これらのバイトがISO-8859-1のような単一バイトエンコードを使用してエンコードされる場合、 0xC3 なります Ã そしてその 0xB1 なります ±. 。を参照してください ISO-8859-1コードページレイアウト.

他のヒント

問題は、あなたが持っていることです モジバケ, 、それをそれが意味するはずだったものに戻す信頼できる方法はありません。見る ウィキペディアでのこの段落 問題の説明について:

ドイツ語を含むテキストファイルを検討してください 毛皮 ISO-8859-1エンコーディング。このファイルは、入力がUTF-8であると仮定するテキストエディターで開かれています。最初のバイトとして(0x66)範囲内です 0x000x7F, 、UTF-8はそれを正しく解釈します f. 。 2番目のバイト(0xFC)UTF-8エンコードされた文字の開始の法的価値ではありません。したがって、テキストエディターは、バイトを交換用の文字記号に置き換えて、何かがうまくいかなかったことをユーザーに警告することができます。最後のバイト(0x72)もコード範囲内にあります 0x000x7F 正しくデコードできます。文字列全体が次のように表示されます。 f�r.

実装されていないテキストエディターは、UTF-8フォームの代替品を保存する可能性があります。テキストファイルデータは次のようになります。 0x66 0xEF 0xBF 0xBD 0x72, 、ISO-8859-1に再び表示されます f�r. また、交換は元のバイトを破壊し、意図したキャラクターを回復することを不可能にします。

最初から間違ったエンコードを使用してテキストを誤って解釈することを避ける必要があります。壊れたときにそれを修正すると手遅れです。

あなたの問題は、トランスコーディングよりも解釈の問題です。最新のコンピューターでは、ñは通常、UTF-8コードであるため、バイナリ0xc3b1として入力されます。古いISO-Latin-15コードで(トランスコーディングなしで)それを解釈すると、0xc3 =ãの後に0xb1 =±があります。これが「テーブル」がない理由です。これはディスプレイの問題です。

最善のことは、イソラチンを完全に避けることです。それはあなたに多くの問題を引き起こします。プログラムを修正する本当の方法は、どこでもUTF-8のみを使用して、多くの時間と頭痛を節約できます。

それまでの間、同等のISO-Latin-15文字列をUTF-8入力(上記の正しい場合はそうではない場合)に本当に取得したい場合は、文字列を任意のコードコンバーターに渡すことができます。 UTF-8をISO-Latin-15に変換するように求めます。注意すべきことの1つは、ダブルトランスコーディングです。 UTF-8文字列があり、ISO-Lating-15からUTF-8への変換を誤って要求した場合、バイナリ0xc383c2b1である実際に直感と言うUTF-8文字列を取得しました。正しいUTF-8文字列を取り戻すために、Anwserは同じです。マングルした文字列をUTF-8からISO-Latin-15に変換するように頼みます。 0xb1、正しいñを含む正しいUTF-8文字列を提供します。

特にPHPおよびWebアプリケーションの場合、多くのコンピューター(および将来ますます)がデフォルトでUTF-8を送信することを忘れないでください。

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