2

私は Web を徹底的に調べてきましたが、この種の変換を含む表を見つけることができないようです。私が見つけたものにはいくつかの間違いがあり、あまり信頼できないので、公式の表などを探しましたが、残念ながらそうではありません..だからここにいます..

タイトルで述べたように、私がやりたいことは、たとえば、「ñ」が何を表しているかを知ることです (これは私が既に知っている..「ñ」)。ポーランドのもの)。

主な問題は、PHP に、たとえば "eñe" (これで問題ありません) や "eñe" などの文字列が含まれていることです。最新の状態では、"eñe" に変更できるはずです。読み取り可能ですが、問題がなければ変更したくありません。これを行うために、utf8_decode 関数を使用していましたが、文字列が読み取り可能な場合でも、「ñ」が「■」に変更されます (ただし、白)。そのため、常に文字列をデコードできるとは限りません。 mb_detect_encoding 関数を使用すると、応答として常に「UTF-8」が返されます..これはあまり役に立ちません..

たとえば、「ñ」の場合は「ñ」、「Ź」の場合は「Ź」などと書かれた utf8 ビット文字をすべて把握したら、基本的に 1 つを別のものに置き換える関数を実行する予定です.. utf8_decode と同じようなものです..誰かがより良い解決策を持っていない限り!

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

4

3 に答える 3

9

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

通常のビジネス コード フローの一部として行うべきではありません。必要なのは、Web アプリケーションのすべてのレイヤーが UTF-8 を適切に使用していることを確認することだけです。PHP ソース、HTTP 応答ヘッダーと本文、DB テーブル、DB 接続など。PHP UTF-8チートシートも参照してください。

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

証拠として、ñ( Unicode Character 'LATIN SMALL LETTER N WITH TILDE' (U+00F1) ) は、バイトおよびのUnicode ( UTF-8、マルチバイト エンコーディング) に存在します。これらのバイトが ISO-8859-1 のようなシングルバイト エンコーディングを使用してエンコードされると、 は になり、 は になります。ISO-8859-1 コードページ レイアウトも参照してください。0xC30xB10xC3Ã0xB1±

于 2010-10-13T02:47:37.223 に答える
4

問題は、一度mojibakeを取得すると、それが本来意味するものに変換する信頼できる方法がないことです。問題の説明については、ウィキペディアの次の段落を参照してください。

ISO-8859-1 エンコーディングでドイツ語の fürを含むテキスト ファイルを考えてみましょう。このファイルは、入力が UTF-8 であると想定するテキスト エディターで開かれます。最初のバイト ( ) は–<code>0x7F0x66の範囲内にあるため、UTF-8 はそれを. 2 番目のバイト ( ) は、UTF-8 でエンコードされた文字の開始として有効な値ではありません。したがって、テキスト エディターは、バイトを置換文字記号に置き換えて、何か問題が発生したことをユーザーに警告することができます。最後のバイト ( ) もコード範囲–<code>0x7F 内にあり、正しくデコードできます。文字列全体が次のように表示されるようになりました。0x00f0xFC0x720x00f�r

テキスト エディタの実装が不十分な場合、置換を UTF-8 形式で保存することがあります。テキスト ファイルのデータは次のようになります: 0x66 0xEF 0xBF 0xBD 0x72、ISO-8859-1 では として再び表示されf�rます。また、置換によって元のバイトが破壊されるため、意図した文字を復元できなくなります。

最初から間違ったエンコーディングを使用してテキストを誤って解釈することは避ける必要があります。壊れてから直しても手遅れです。

于 2010-10-13T02:47:29.010 に答える
0

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

最善の方法は、iso-latin を完全に避けることです。それはあなたに多くの問題を引き起こします。プログラムを修正する本当の方法は、どこでも 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 に変換するように依頼すると、喜んで 0xc383 を取得して 0xc3 に変換し、次に 0xc2b1 を次のように変換します。 0xb1、正しい ñ を含む正しい utf-8 文字列を提供します。

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

于 2010-10-13T02:59:14.473 に答える