「文字化けの対処」の版間の差分
1行目: | 1行目: | ||
− | == | + | ==[[Webアプリケーション]]での文字化けの対処== |
− | + | [[Category:文字化け]] | |
*[http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932 Microsoftコードページ932] | *[http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932 Microsoftコードページ932] | ||
*[http://ja.wikipedia.org/wiki/Unicode Unicode] | *[http://ja.wikipedia.org/wiki/Unicode Unicode] | ||
− | ===Java=== | + | ===[[Java]]=== |
− | ==== | + | ====HttpServlet[[R]]equest クラス==== |
public void setCharacterEncoding(java.lang.String env) | public void setCharacterEncoding(java.lang.String env) | ||
throws java.io.UnsupportedEncodingException | throws java.io.UnsupportedEncodingException | ||
− | + | この要求の本体で使用される文字[[エンコーディング]]の名前をオーバーライドします。 | |
このメソッドは、要求パラメータの読み取り、 | このメソッドは、要求パラメータの読み取り、 | ||
− | または | + | または get[[R]]eader() を使用した入力の読み取りに先立って呼び出す必要があります。 |
====[http://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLDecoder.html URLEncoder|http://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLEncoder.html]、 [URLDecoder] クラス==== | ====[http://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLDecoder.html URLEncoder|http://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLEncoder.html]、 [URLDecoder] クラス==== | ||
− | HTML 形式をエンコード、デコードするためのユーティリティクラス。 | + | [[HTML]] 形式をエンコード、デコードするためのユーティリティクラス。 |
String と application/x-www-form-urlencoded MIME 形式 をエンコード、デコードするための static メソッドを含む。 | String と application/x-www-form-urlencoded MIME 形式 をエンコード、デコードするための static メソッドを含む。 | ||
25行目: | 25行目: | ||
*「%xy」という形式のシーケンスは、バイトの表現として扱う | *「%xy」という形式のシーケンスは、バイトの表現として扱う | ||
− | <blockquote>JavaScript の encodeURIComponent、decodeURIComponent に対応</blockquote> | + | <blockquote>[[JavaScript]] の encodeURIComponent、decodeURIComponent に対応</blockquote> |
− | ===JSP=== | + | ===[[JSP]]=== |
====<%@ page contentType="text/html; charset=Shift-JIS" %>==== | ====<%@ page contentType="text/html; charset=Shift-JIS" %>==== | ||
− | + | 出力の文字[[エンコーディング]]をpage指示子を用いて設定します。 | |
====<%@ page pageEncoding="Shift-JIS" %> ==== | ====<%@ page pageEncoding="Shift-JIS" %> ==== | ||
− | + | 取り込むファイルの文字[[エンコーディング]]を指定 | |
WebサーバやWebブラウザでは,charsetは次のような優先順位で処理するように | WebサーバやWebブラウザでは,charsetは次のような優先順位で処理するように | ||
− | + | [[HTML]]仕様 4.0で規定されています. | |
− | # Content-Typeのcharsetパラメータ (HTTP) | + | # Content-Typeのcharsetパラメータ ([[HTTP]]) |
− | # http-equivのあるMETA宣言のContent-Typeやcharsetの値 (HTML) | + | # http-equivのあるMETA宣言のContent-Typeやcharsetの値 ([[HTML]]) |
− | # 要素のcharset属性 (HTML) | + | # 要素のcharset属性 ([[HTML]]) |
− | + | Servletや[[JSP]]のContent-Typeで"text/html; charset=Shift_JIS"のように | |
charsetを指定した場合は(1)に相当します | charsetを指定した場合は(1)に相当します | ||
− | ===ECMAScript(JavaScript)=== | + | ===ECMAScript([[JavaScript]])=== |
− | ==== | + | ====encodeU[[R]]I, decodeU[[R]]I, encodeU[[R]]IComponent, decodeU[[R]]IComponent ==== |
escape/unescape と違って RFC 準拠 ([http://www.ietf.org/rfc/rfc2396.txt RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax]) | escape/unescape と違って RFC 準拠 ([http://www.ietf.org/rfc/rfc2396.txt RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax]) | ||
− | JavaScript では ECMA-262 3rd Edition に対応するバージョン 1.5 で、これらの関数に対応 | + | [[JavaScript]] では ECMA-262 3rd Edition に対応するバージョン 1.5 で、これらの関数に対応 |
− | JScript はバージョン 5.5 で対応( | + | JScript はバージョン 5.5 で対応(MS[[IE]] 5.5) |
*[https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Functions/encodeURI encodeURI] | *[https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Functions/encodeURI encodeURI] | ||
54行目: | 54行目: | ||
− | <blockquote> | + | <blockquote>encodeU[[R]]Iでは、"&"や"+"や"="などの文字をエンコードしないので、GETやPOSTメソッドで利用するときは、encodeU[[R]]IComponentを使用する。こちらは、英数以外は、"- _ . ! ~ * ' ( ) "のみがエスケープされない。</blockquote> |
− | ====HTML特殊文字の処理==== | + | ====[[HTML特殊文字の処理]]==== |
− | ====[HTML javascript:を利用するとデコードされる | + | ====[[HTML javascript:を利用するとデコードされる|javascript:を利用するとデコードされる]]==== |
=====参照===== | =====参照===== | ||
− | http://www.w3.org/ | + | http://www.w3.org/T[[R]]/html40/appendix/notes.html#non-ascii-chars |
− | http://www.cresc.co.jp/tech/java/URLencoding/ | + | http://www.cresc.co.jp/tech/java/URLencoding/[[JavaScript]]_URLEncoding.htm |
---- | ---- | ||
− | {{include_html banner_html, "!J2EE"}} | + | {{include_html [[banner_html]], "!J2EE"}} |
2020年2月16日 (日) 04:21時点における最新版
Webアプリケーションでの文字化けの対処
Java
HttpServletRequest クラス
public void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingException
この要求の本体で使用される文字エンコーディングの名前をオーバーライドします。 このメソッドは、要求パラメータの読み取り、 または getReader() を使用した入力の読み取りに先立って呼び出す必要があります。
URLEncoder|http://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLEncoder.html、 [URLDecoder] クラス
HTML 形式をエンコード、デコードするためのユーティリティクラス。 String と application/x-www-form-urlencoded MIME 形式 をエンコード、デコードするための static メソッドを含む。
- 「a」から「z」、「A」から「Z」、「0」から「9」、「-」、「_」、「.」、「*」。文字 「%」は使用可能だが、特殊なエスケープシーケンスの開始と解釈
- 英数字文字の「a」から「z」、「A」から「Z」、および「0」から「9」は元のまま残す
- 特殊文字の「.」、「-」、「*」、および「_」は元のまま残す
- プラス記号「+」を空白文字「 」に変換する
- 「%xy」という形式のシーケンスは、バイトの表現として扱う
<blockquote>JavaScript の encodeURIComponent、decodeURIComponent に対応</blockquote>
JSP
<%@ page contentType="text/html; charset=Shift-JIS" %>
出力の文字エンコーディングをpage指示子を用いて設定します。
<%@ page pageEncoding="Shift-JIS" %>
取り込むファイルの文字エンコーディングを指定
WebサーバやWebブラウザでは,charsetは次のような優先順位で処理するように HTML仕様 4.0で規定されています.
- Content-Typeのcharsetパラメータ (HTTP)
- http-equivのあるMETA宣言のContent-Typeやcharsetの値 (HTML)
- 要素のcharset属性 (HTML)
ServletやJSPのContent-Typeで"text/html; charset=Shift_JIS"のように charsetを指定した場合は(1)に相当します
ECMAScript(JavaScript)
encodeURI, decodeURI, encodeURIComponent, decodeURIComponent
escape/unescape と違って RFC 準拠 (RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax) JavaScript では ECMA-262 3rd Edition に対応するバージョン 1.5 で、これらの関数に対応 JScript はバージョン 5.5 で対応(MSIE 5.5)
<blockquote>encodeURIでは、"&"や"+"や"="などの文字をエンコードしないので、GETやPOSTメソッドで利用するときは、encodeURIComponentを使用する。こちらは、英数以外は、"- _ . ! ~ * ' ( ) "のみがエスケープされない。</blockquote>
HTML特殊文字の処理
javascript:を利用するとデコードされる
参照
http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars http://www.cresc.co.jp/tech/java/URLencoding/JavaScript_URLEncoding.htm
{{include_html banner_html, "!J2EE"}}
© 2006 矢木浩人