UTF-8は、(一般的に)世界中のあらゆる文字セットにとって「安全な」エンコーディングです。 (常に最も効率的であるとは限りません。Unicodeは「統一されたhan」モデルでCJKスクリプトを過小評価しているが、先に進むという議論があります…)
ただし、インターフェイスプログラムがUTF-8との間で適切に変換されていない可能性があります。たとえば、ó=>óは、ISO-8859-15やMS-などのシングルバイトのヨーロッパエンコーディングを使用して、UTF-8データ(1文字をさまざまなバイト数に分散できる)が表示されているように見えます。 CP-1451または同様のもの。
あなたはおそらく データを正しく保存しますが、読み込み中 それは間違っています。 mysql
を使用しているだけの場合 ターミナルプログラムなどの場合は、ターミナルがUTF-8を使用するように設定されていることを確認します(Unix / Linuxシステムでは、locale
おそらく.utf8
で終わるものである必要があります 、例:私のはLANG=en_US.utf8
を持っています )
GUIツールなどを使用してデータを取得する場合は、その設定/設定パネルで文字セットを確認してください。
誤って翻訳された文字を作成したアプリケーションに戻す場合は、ロケールを設定するための言語のツールを確認してください。 (おそらく、INSERT
ルーチンはそれを正しく持っていますが、SELECT
ルーチンに問題がありますか?)
また、これをWebに送信する場合は、(XML | HTML | XHTML)ファイルにcharset=utf8
が含まれていることを確認してください。 適切な場所で宣言されているまたは iconv
などを使用して、UTF-8からドキュメントの文字セット(可能な場合)に変換し直します。 データベースからテキストを挿入するとき。 (もちろん、ほとんどの非Unicode文字セットはUnicodeのサブセットのみを表すことができます。たとえば、ISO-8859-15セットはヨーロッパ言語をカバーするのに適切な役割を果たしますが、キリル文字、アラビア文字、またはCJK書記体系をサポートしていません。文字の翻訳に失敗する可能性があります。)Perlでは、パス引数を使用してopen
を開くことができます。 またはbinmode
を使用します 「ファイルハンドル」ストリームに透過的な文字セット変換レイヤーを設定します。