SQLplusとOracle、UTF-8が正しく表示されない

SQLplusとOracle、UTF-8が正しく表示されない

私は設定しました

export NLS_LANG=Italian_ITALY.UTF8

データベースはUTF-8を使用します。

SELECT * FROM NLS_DATABASE_PARAMETERS
NLS_CHARACTERSET                                                            |AL32UTF8

ただし、sqlplusは無効なò à ì文字を表示します。

select titolo from generale where titolo like '%%Roma d%%';

TITOLO
------------------------------------------------------------
Roma drogata: la polizia non pu�� intervenire

でなければならない

select titolo from generale where titolo like '%%Roma d%%';

TITOLO
------------------------------------------------------------
Roma drogata: la polizia non può intervenire

私はすべてUTF-8を使用するAIXとLinuxクライアントを試しました。

私は何を見逃していますか?

答え1

質問に実際のロケールは記載されていません。 Oracleによると、NLS_LANGそれに対応するように設定する必要があります。実際のロケールがUTF-8を使用していない場合は、質問に示されている代替文字が取得されます。

追加資料:

UNIXでNLS_LANGを正しく設定する方法

クライアントOracleソフトウェアのロケール動作を指定するには、以下を設定する必要があります。NLS_LANG範囲。クライアントの言語、地域、文字セットを設定します。設定するには、ロケール設定を確認する必要があります。NLS_LANG3番目のフィールド(文字セット)はこれと一致します。これを行うには、次のように "locale" コマンドを使用します。

7-ロケール設定とNLS_LANGの作成必要データベース文字セットと一致しますか?
いいえ、ロケールとNLS_LANG設定(および該当する場合はtelnet / sshの設定)は一致する必要がありますが、どちらも技術的にデータベースの文字セットとは無関係であり、そのクライアント環境にのみ関連しています。

答え2

データベースのテキストに正しい文字がありますか?つまり、データベースに入っている間に破損していないことを確認しましたか?sqlplusの出力をパイプしod -t x1z、それを使用してデータベースが正しいエンコーディングを出力していることを確認できます。エンコーディングが正しい場合、欠陥は別の場所にあります。

表示される設定は、データベースとOracleクライアントがUTF-8を使用するように正常に設定されていることを確認します。その後、Oracleクライアントが文字(たとえばsqlplus)を出力すると、オペレーティングシステムによって処理されます。

オペレーティングシステムのロケールを確認するためにそのコマンドを使用したかどうかはわかりませんが、locale使用したとします。

stty設定も確認しましたか?これらの設定が8ビットクリーンではない場合、転送中にUTF-8文字が破損します。しかし、問題ではないようです。 UTF-8エンコーディングはò0xc3 0xb2です。最も高いビットが0に強制されると、0x43 0x32になるか、大文字Cと数字2になります。すべて有効なUTF-8文字です。

次のキャラクターを扱うのはあなたの分け前です端末エミュレータ:Windowsを使用している場合は通常PuTTYです。非常に古いバージョンのPuTTY(0.62以下)はデフォルトでISO-8859-1文字セットを使用し、最新バージョンでは特に異なる選択を行い、新しいデフォルト値を保存しない限り、デフォルトではUTF-8を使用します。

実際、シングルはò次のようにマッピングされます。二つ文字は、端末エミュレータがUTF-8で構成されておらず、シングルバイト文字を使用するいくつかの文字セットで構成されていることを示します。

òUTF-8の2バイトを未知の文字を表す記号に置き換えるように見えるため、直線ASCIIを期待するように構成することもできます。したがって、ターミナルエミュレータは7ビットASCIIセット以外の文字を必要としないか、現在使用中のフォントにはバイト0xc3と0xb2に対応する文字形状(グリフ)がありません。

したがって、ターミナルエミュレータの設定で2つのことを修正する必要があります。

まずUTF-8に設定する必要があります。文字セット現在予想されるより。この操作が正常に完了したら、その文字をò次の場所にマップする必要があります。一つ二人ではないキャラクター。そうであってもなくてもよい正しいただし、2文字ではなく1文字のみを表示することが重要です。

表示された文字がまだ正しくない場合は、端末エミュレータで使用されているフォントに実際に文字の外観があることを確認する必要がありますò

関連情報