ホームページ  >  記事  >  Java  >  Java oracleで中国語が文字化けした場合の対処方法

Java oracleで中国語が文字化けした場合の対処方法

coldplay.xixi
coldplay.xixiオリジナル
2020-08-17 13:49:252664ブラウズ

java Oracle 中国語文字化け解決策: 1. 読み取った文字列 s を手動で変換します。コードは [new String(s.getByte(A), B)]; 2. Druid を使用して、統合されたレイヤーを提供します。さまざまなデータベースドライバーのカプセル化とエンコード変換。

Java oracleで中国語が文字化けした場合の対処方法

[関連する学習の推奨事項: java 基本チュートリアル]

Java oracle 中国語の文字化けの解決策:

トランスコード方法

Java が Oracle を読み込んで中国語の文字化けが発生した場合は、トランスコードする必要があります。トランスコードには多くの方法がありますが、私が見つけた方法は次のとおりです。

1. 純粋な手動トランスコーディング

読み取り文字列 s をトランスコードします (例: new String(s.getByte(A), B)

2 , Druid

Druid は Alibaba 自身が開発したドライバーで、実際にはさまざまなデータベース ドライバーを統合レイヤーにカプセル化し、ロギング、アラーム、エンコード変換などの機能を追加します。設定方法は次のとおりです。

<bean id="opensqlDataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.alibaba.china.jdbc.SimpleDriver" />
<property name="url" value="jdbc:oracle:thin:@10.20.130.210:1521:dwtest" />
<property name="username" value="etl" />
<property name="password" value="etl" />
<property name="connectionProperties"><value>serverEncoding=ISO-8859-1;clientEncoding=GBK;defaultRowPrefetch=50;bigStringTryClob=true</value></property>
</bean>

connectionProperties には、serverEncoding と clientEncoding の 2 つのプロパティが含まれています。 Javaがデータを読み込んだ後、serverEncodingとclientEncodingが異なることが判明した場合、以下のエンコード変換が自動的に行われます。

new String(s.getByte(serverEncoding), clientEncoding)

3.weblade ibatis callback

ibatis コールバックの登録方法は以下の方法を採用しています。

<bean id="sqlMapExecutorDelegate"
class="com.asc.alibaba.dao.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate">
<property name="mappedStatementStrategy" ref="mappedStatementStrategy" />
<property name="handlerList">
<list>
<ref bean="stringHandler" />
<!-- <ref bean="objectHandler" />-->
</list>
</property>
</bean>
<bean id="stringHandler" class="com.asc.alibaba.dao.ibatis.handler.TypeHandlerAdapter">
<property name="javaType" value="java.lang.String" />
<property name="handlerCallback" ref="stringTypeHandlerCallback" />
</bean>

そのため、デフォルトでは、プログラムは ibatis によって取得された文字列を次のように変換します:

new String(s.getByte(“ISO-8859-1”), “GBK”)

セカンドパーティ ライブラリは次のように導入されます:

<dependency>
<groupId>com.alibaba.asc.shared</groupId>
<artifactId>weblade.core.ibatisext</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>

Ibatis callback はエンコード変換プロセスを非表示にしますが、問題は、それがプロジェクト内のすべてのデータ ソースに影響することです。これにより、トランスコーディングを必要とするデータ ソースとトランスコーディングを必要としないデータ ソースを同時に透過的にサポートすることができなくなります。

関連する推奨事項: プログラミング ビデオ コース

以上がJava oracleで中国語が文字化けした場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。