Androidプログラミングがサーバに要求を送信する時、中国語の文字化け問題の解決方法が現れます。
本明細書の例は、Androidプログラミングがサーバに要求を送信する際の中国語の文字化け問題の解決方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
私たちはandoredプロジェクトでget方式でサーバーに要求を送ります。ここでurlパラメータは中国語を持っています。文字化け、文字化けが発生する原因は二つあります。
1、パラメータを提出する時、中国語パラメータをURL符号化していません。
2、TomcatサーバはデフォルトではIOS 859-1符号化(中国語に対応していない)を採用してパラメータ値を得る。
解決:
1、android項目に入ります。パラメータを提出する時、パラメータの値を符号化します。
新規filterは、すべてのパスをフィルタリングするように設定されています。URL Patternは、*、要求が来るたびにdofilterメソッドを呼び出します。具体的なコードは以下の通りです。
(1)飾り物と本物のオブジェクトは同じインターフェースがあります。このようにクライアントオブジェクトは、本物のオブジェクトと同じ方法で、装飾オブジェクトと対話することができる。
(2)飾りオブジェクトには、実在のオブジェクトの索引(reference)が含まれています。
(3)装飾オブジェクトは、クライアントからのすべての要求を受け付ける。これらの要求を本物のオブジェクトに転送します。
(4)装飾オブジェクトは、これらの要求を転送する前または後に、いくつかの追加機能を追加することができる。これにより、実行時に、与えられたオブジェクトの構造を変更することなく、外部に追加の機能を追加することができます。オブジェクト指向の設計では、通常、クラスの機能拡張は継承によって達成される。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。
私たちはandoredプロジェクトでget方式でサーバーに要求を送ります。ここでurlパラメータは中国語を持っています。文字化け、文字化けが発生する原因は二つあります。
1、パラメータを提出する時、中国語パラメータをURL符号化していません。
2、TomcatサーバはデフォルトではIOS 859-1符号化(中国語に対応していない)を採用してパラメータ値を得る。
解決:
1、android項目に入ります。パラメータを提出する時、パラメータの値を符号化します。
URLEncoder.encode(value, ); //"UTF-8"
2、IOS 859を介して文字列のバイナリデータを取得し、UTF-8を介して新しい文字列を取得すれば良い。String title = new String(value.getBytes("ISO8859-1","UTF-8");
ウェブプロジェクト全体ですべての要求が上記の方法でエンコーディング問題を解決するのは面倒くさいです。フィルタを使って解決できます。新規filterは、すべてのパスをフィルタリングするように設定されています。URL Patternは、*、要求が来るたびにdofilterメソッドを呼び出します。具体的なコードは以下の通りです。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if("GET".equals(req.getMethod())){
EncodingRequestWrapper wrapper = new EncodingRequestWrapper(req);
chain.doFilter(wrapper, response);
}else{
req.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
この中のEncocdingRequest Wrapperコード:
public class EncodingRequestWrapper extends HttpServletRequestWrapper {
private HttpServletRequest request;
public EncodingRequestWrapper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String value = request.getParameter(name);
if(value!=null){
try {
value = new String(value.getBytes("ISO8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
}
このようにすべてのGET要求に対して中国語パラメータを正確に処理できます。以上のフィルタは装飾モードの設計を採用しています。装飾モードについては、以下の通りです。(1)飾り物と本物のオブジェクトは同じインターフェースがあります。このようにクライアントオブジェクトは、本物のオブジェクトと同じ方法で、装飾オブジェクトと対話することができる。
(2)飾りオブジェクトには、実在のオブジェクトの索引(reference)が含まれています。
(3)装飾オブジェクトは、クライアントからのすべての要求を受け付ける。これらの要求を本物のオブジェクトに転送します。
(4)装飾オブジェクトは、これらの要求を転送する前または後に、いくつかの追加機能を追加することができる。これにより、実行時に、与えられたオブジェクトの構造を変更することなく、外部に追加の機能を追加することができます。オブジェクト指向の設計では、通常、クラスの機能拡張は継承によって達成される。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。