1

アラビア文字列を含む MySQL テーブルがあります。ただし、テーブルの文字セットはlatin1. utf8テーブルが正しく表示されるように、同じものをに変換したい。

私はこれを経験しました:http://www.bothernomore.com/2008/12/16/character-encoding-hell/

しかし、アラビア文字では機能しませんでした。ここにも投稿があります: Latin1 から UTF8 への変換 コメントには次のように書かれています:

latin1 はアラビア文字をサポートしていません。テキストを latin1 として保存するにはどうすればよいですか?

アラビア文字を表示できる文字セットに変換できないということですか。

4

1 に答える 1

3

Latin1 (ISO 8859-1) コード セットは西ヨーロッパ言語用であり、単にアラビア文字が含まれていません。アラビア文字を取得するには、ISO 8859-6 が必要です。これで、8859-6 では有効なアラビア文字であり、8859-1 ではヨーロッパのアクセント付き文字として表示される範囲 0x00..0xFF のコード ポイントを持つことができ、8859-6 の値を UTF8 にマップするように調整できます。8859-6 の範囲の下半分は 8859-1 と同じです。実際、これはすべての 8859-x コード セットに当てはまり、コード ポイント 0x80..0x9F は制御コードであるため、「半分」は実際には 5/8 です。

8859-1 とは異なる 8859-6 で定義された文字は、0xA0 から始まります。8859-6 コード セットには多くのギャップがあります。

A0 U+00A0 NO-BREAK SPACE
A4 U+00A4 CURRENCY SIGN
AC U+060C ARABIC COMMA
AD U+00AD SOFT HYPHEN

BB U+061B ARABIC SEMICOLON
BF U+061F ARABIC QUESTION MARK

C1 U+0621 ARABIC LETTER HAMZA
C2 U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE
C3 U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
C4 U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE
C5 U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW
C6 U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE
C7 U+0627 ARABIC LETTER ALEF
C8 U+0628 ARABIC LETTER BEH
C9 U+0629 ARABIC LETTER TEH MARBUTA
CA U+062A ARABIC LETTER TEH
CB U+062B ARABIC LETTER THEH
CC U+062C ARABIC LETTER JEEM
CD U+062D ARABIC LETTER HAH
CE U+062E ARABIC LETTER KHAH
CF U+062F ARABIC LETTER DAL

D0 U+0630 ARABIC LETTER THAL
D1 U+0631 ARABIC LETTER REH
D2 U+0632 ARABIC LETTER ZAIN
D3 U+0633 ARABIC LETTER SEEN
D4 U+0634 ARABIC LETTER SHEEN
D5 U+0635 ARABIC LETTER SAD
D6 U+0636 ARABIC LETTER DAD
D7 U+0637 ARABIC LETTER TAH
D8 U+0638 ARABIC LETTER ZAH
D9 U+0639 ARABIC LETTER AIN
DA U+063A ARABIC LETTER GHAIN

E0 U+0640 ARABIC TATWEEL
E1 U+0641 ARABIC LETTER FEH
E2 U+0642 ARABIC LETTER QAF
E3 U+0643 ARABIC LETTER KAF
E4 U+0644 ARABIC LETTER LAM
E5 U+0645 ARABIC LETTER MEEM
E6 U+0646 ARABIC LETTER NOON
E7 U+0647 ARABIC LETTER HEH
E8 U+0648 ARABIC LETTER WAW
E9 U+0649 ARABIC LETTER ALEF MAKSURA
EA U+064A ARABIC LETTER YEH
EB U+064B ARABIC FATHATAN
EC U+064C ARABIC DAMMATAN
ED U+064D ARABIC KASRATAN
EE U+064E ARABIC FATHA
EF U+064F ARABIC DAMMA

F0 U+0650 ARABIC KASRA
F1 U+0651 ARABIC SHADDA
F2 U+0652 ARABIC SUKUN

上記にリストされていない範囲 0xA0..0xFF の文字は、8859-6 では有効なアラビア文字ではありません。

iconvプログラムはおそらく 8859-6 から UTF-8 への変換を処理できます。これも実行できるプログラムがあり、これはそのプログラムの 1 つのデータ ファイルです。(適切なテーブルを指定すると、任意のシングルバイト コード セット SBCS を UTF8 に変換します。)

8859-6についてはhttp://czyborra.com/charsets/iso8859.html#ISO-8859-6を、ISO 8859-x コード セットに関する一般的な情報についてはhttp://czyborra.com/charsets/iso8859.htmlを参照してください。 . また、さまざまなコード セットについて説明している他のページへのリンクもあります。


アラビア文字を表示できる文字セットに変換できないということですか?

いいえ; 変換することはできますが、「Latin1 のアラビア文字」が何を意味するのかを理解する必要があることは間違いありません。このステートメントはそれ自体では何も意味しないためです。用語の矛盾です。

あなたが得たデータの意味のある解釈を与えるあなたの声明にもっともらしいひねりを加えましたが、それが正しい解釈であることを保証することはできません.

データがどのように入力されたのか、それが何を意味するのかを知り、それをどのように翻訳するかを決定する必要があります。データが 8859-6 を使用して入力されたが、それが 8859-1 であると想定された列 (テーブル、データベース) に格納された場合、値を抽出し、UTF8 に変換して、期待するデータベースに UTF8 データを挿入できます。 UTF8. (実際には、8859-1 は任意のバイト シーケンスを受け入れるため、UTF8 を 8859-1 列に詰め込むことができます。アラビア文字ごとに 2 バイトあることに注意してください。8859-1 としては意味がありません。 , しかし、何も切り捨てない限り正確になります. 文字列を切り捨てると、UTF8 文字の途中で途切れることがあり、データを UTF8 として解釈するものはすべてあなたに不満を持ってください。

于 2013-11-08T06:02:32.723 に答える