技術共有

C# が US7ASCII 文字セットを読み取るときに Oracle データベースで中国語が文字化けする問題を解決する

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

👨 作者简介:大家好,我是Taro,全栈领域创作者
✒️個人ホームページ:ドン・ファン・タロウ
🚀 支持我:点赞👍+📝 评论 + ⭐️收藏



序文

最近、病院の HIS システムと相手先のデータベースに接続する必要があり、病院が Oracle を使用していることがわかりました。アメリカ_アメリカ.US7ASCIIエンコード形式がエンコードされているため、プログラムに読み込まれた中国語データが文字化けします。

ここに画像の説明を挿入します


以下是本篇文章正文内容,下面案例可供参考

1. 解決策

病院ユニットのデータ エンコーディングは変更できないため、多くの方法をテストし、最終的には処理に独立した Oracle ドライバーを使用する、より効率的な処理方法 (ODAC + OleDbConnection) を選択しました。

2. System.Data.OleDb 接続ライブラリをインストールします。

  1. Oracle.ManagedDataAccess.クライアント Oracleデータベースに接続するためにC#で最もよく使われるパッケージであり、Oracleが公式に提供している.NETデータアクセスライブラリでもありますが、文字化けの問題は解決できません。

  2. 採用しなければならないシステム.データ.OleDb , 独自のoracleドライバーを使って処理を行っており、これが中国語の文字化けを解決する鍵となります。
    ここに画像の説明を挿入します

システム.データ.OleDb 依存関係:
ここに画像の説明を挿入します

コアコード:

  1. 接続データベース文字列:
<add connectionString="Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User ID=db;Password=db;" name="HIS" />
  • 1

プログラム呼び出し:
ここに画像の説明を挿入します

3. ODAC コンポーネント ドライバーをローカルにインストールします。

ODAC をダウンロード:https://www.oracle.com/database/technologies/dotnet-utilsoft-downloads.html

ODAC をインストールした後、コンピューターを再起動する必要があります。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
インストールが完了するまで「次へ」をクリックし続けます
ここに画像の説明を挿入します

画像の説明を追加してください

4. システム環境変数を編集する

この手順では、ローカルとクライアントのデータベースの文字セットの一貫性を保ち、ローカルで表示したときにデータが文字化けするのを防ぎます。

变量名:NLS_LANG |  变量值:AMERICAN_AMERICA.US7ASCII
  • 1

コードは次のとおりです(例)。
ここに画像の説明を挿入します

5. プログラムのデバッグ

  • 中国語データ部分は正常に表示され、文字化けもなくなりました。
    ここに画像の説明を挿入します

要約する

以上が今日お話しする内容です。歴史的な理由により、初期の Oracle には中国語の文字セット (oracle6、oracle7、oracle7.1 など) がありませんでしたが、一部のユーザーはそれ以来データベースを使用し、US7ASCII に保存しています。この記事では、US7ASCII 文字セット Oracle データベースの中国語文字化け問題を完全に解決する System.Data.OleDb ライブラリの使用法について簡単に紹介します。