==[[Javaでの文字コードの扱い]]==[[Java]] | {{category [[Category:文字化け}}]]
なんだかんだといつも厄介な文字コードの変換についてのメモなんだかんだといつも厄介な[[文字コード]]の変換についてのメモ
結局、ファイル読込み、文字列変数の取り扱い、ファイル書き込みなどの各局面で、実際はどの文字コードが使用されているかを考え、適切にコンバートすることが肝要結局、ファイル読込み、文字列変数の取り扱い、ファイル書き込みなどの各局面で、実際はどの[[文字コード]]が使用されているかを考え、適切にコンバートすることが肝要
*[http://www.kanzaki.com/netfan/ インターネットの言葉と技術]
===Javaに限らず、厄介な文字化けについてJavaに限らず、厄介な[[文字化け]]について==={{category [[Category:文字化け}}]]
{{amazon|477414164X}}
====ソースコードの変換====
=====ソースコードのコンパイル時、プラットフォームの文字コードやファイルの文字コードに依存してしまう。ソースコードのコンパイル時、プラットフォームの[[文字コード]]やファイルの[[文字コード]]に依存してしまう。=====
*Windowsでソースを書いてLinuxでコンパイルを行ったりするような場合には、プラットフォームとソースコードの文字コードの不一致によって文字化けが発生する。[[Windows]]でソースを書いてLinuxでコンパイルを行ったりするような場合には、プラットフォームとソースコードの文字コードの不一致によって文字化けが発生する。
*[http://www.y-adagio.com/public/standards/tr_javalang2/lexical.doc.html#100850 native2ascii|http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/native2ascii.html] を使用して、ソースコードに含まれるUnicode以外の文字を、[Unicodeエスケープ]に変換する。
===ファイルの読み書き===
プログラムの実行時にファイルを読込む必要がある場合等は、ファイルに合わせた文字コードでファイルを読まなければ文字化けしてしまう場合がある。プログラムの実行時にファイルを読込む必要がある場合等は、ファイルに合わせた[[文字コード]]でファイルを読まなければ文字化けしてしまう場合がある。====文字コードを指定してファイルを読む[[文字コード]]を指定してファイルを読む=========FileInputStream を利用することにより、文字コードを指定してファイルを読むことができるを利用することにより、[[文字コード]]を指定してファイルを読むことができる===== BufferedReader Buffered[[R]]eader reader = new BufferedReaderBuffered[[R]]eader(new InputStreamReaderInputStream[[R]]eader(new FileInputStream("/var/files/ebicdic.txt"),"Cp943c"));====文字コードを指定してファイルを書く[[文字コード]]を指定してファイルを書く=========FileInputStream を利用することにより、文字コードを指定してファイルを書くことができるを利用することにより、[[文字コード]]を指定してファイルを書くことができる=====
BufferedWriter writer
= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:\\shift_jis.txt"), "MS932"))
===文字コードの変換[[文字コード]]の変換===
<blockquote>nicodeで定義された文字集合で表現された文字列" から "バイト列" へのエンコード方法、逆にデコード方法を指定する。</blockquote>
*sun.io.ByteToCharConverter
====文字コードの変換[[文字コード]]の変換=========上記を使用して、文字コードを変換する上記を使用して、[[文字コード]]を変換する=====
String newCode = new String(oldCode.getBytes("Cp930"), "MS932");
====デフォルトエンコード(デコード)====
=====エンコード(デコード)方式を指定しないと、プラットフォームのデフォルトエンコーディングが使用される。方式を指定しないと、プラットフォームのデフォルト[[エンコーディング]]が使用される。=====
システムプロパティ
|line.separator
|行のセパレータ
|CRLFC[[R]]LF
|-
|}
*sun.io.Converters.getDefaultEncodingName()
====文字コードの16進ダンプ[[文字コード]]の16進ダンプ====
=====デバッグ用=====
public static String stringDump(String s) {
return buf.toString();
}
====文字コードの16進ダンプを復元[[文字コード]]の16進ダンプを復元====
=====デバッグ用=====
public static String decodeDumpString(String s) {
}
====[[エンコーディング]]====*[[文字コード]]
*[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]
=====JavaでサポートされるエンコーディングJavaでサポートされる[[エンコーディング]]=====
*[http://java.sun.com/j2se/1.3/ja/docs/ja/guide/intl/encoding.doc.html 1.3|http://java.sun.com/j2se/1.3/docs/guide/intl/encoding.doc.html]([日本語])
*[http://java.sun.com/j2se/1.4/ja/docs/ja/guide/intl/encoding.doc.html 1.4|http://java.sun.com/j2se/1.4/docs/guide/intl/encoding.doc.html]([日本語])
*[http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/encoding.doc.html 1.5|http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html]([日本語])
=====エンコーディングの別名一覧[[エンコーディング]]の別名一覧=====
*[http://www2s.biglobe.ne.jp/~katsum/java/encoding.html sun.io.CharacterEncoding]
=====[[その他]]=====
*MS932またはSJISの別名として定義されており、どちらの別名となるかはバージョンに依存している(JDK 1.3ではMS932だが、JDK 1.4ではSJISとなる)。
*http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html
=====CP943cとShift_JISの文字コードの違いについてCP943cとShift_JISの[[文字コード]]の違いについて=====*http://www-1.ibm.com/support/docviewdoc[[vi]]ew.wss?uid=std3b32aea767378855449256f010028e2f4
===マルチパートのエンコード===
====ファイルアップロードの場合にファイル名が文字化けするファイルアップロードの場合にファイル名が[[文字化け]]する====
=====Form=====
<form id="formUpload" action="upload.html" method="POST" enctype="multipart/form-data" >
</form>
=====文字コードをiso[[文字コード]]をiso-8859-1として変換=====*http://ja.wikipedia.org/wiki/ISO/IEC_8859[[IE]]C_8859-1*[[Spring ]] の場合
@RequestMapping[[R]]equestMapping(value="/upload.html", method = RequestMethod[[R]]equestMethod.POST)
public String uploadFile(MultipartFile file) {
String filename = new String(file.getOriginalFilename().getBytes("iso-8859-1"),"utf-8");
:
====ファイルダウンロード時にファイル名が文字化けするファイルダウンロード時にファイル名が[[文字化け]]する==== //String fileName = new String(originalFileName.getBytes("utf-8"),"iso-8859-1"); // Chrome OK, [[IE ]] NG String fileName = new String(originalFileName.getBytes("ms932"),"iso-8859-1"); // Chrome OK, [[IE ]] OK
response.setHeaderset[[Header]]("Content-Type", "application/octet-stream"); response.setHeaderset[[Header]]("Content-Disposition", "filename=\"" + fileName + "\"");
===Shift_JISの取り扱い===
*MS932またはSJISの別名として定義されており、どちらの別名となるかはバージョンに依存している(JDK 1.3ではMS932だが、JDK 1.4ではSJISとなる)。
*機種依存文字(NEC特殊文字、NEC選定IBM拡張文字、IBM拡張文字)や~∥-¢£¬などの扱いが異なり、誤って使用すると“?”に文字化け機種依存文字(NEC特殊文字、NEC選定IBM拡張文字、IBM拡張文字)や~∥-¢£¬などの扱いが異なり、誤って使用すると“?”に[[文字化け]]
*http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html
*[[文字コード ]] 参照
=====円記号=====
*Shift_JISでは、半角円記号とバックスラッシュを区別しないが、する文字コード体系だと見た目上は、半角円記号なのに、Stringのメソッドが正しく動作しないShift_JISでは、半角円記号とバックスラッシュを区別しないが、する[[文字コード]]体系だと見た目上は、半角円記号なのに、Stringのメソッドが正しく動作しない(ように見える)
String str1 = "\u005c\u005c";
String str2 = "\u00a5";
\ = \
false
===ファイルの文字コードを判別するファイルの[[文字コード]]を判別する===*[[Java ファイルの文字コードを判別する|ファイルの文字コードを判別する] [ファイルの文字コードを判別する]===[[その他]]===
{{amazon|4774107808}}
====Webアプリケーションの文字化け対策[[Webアプリケーション]]の文字化け対策====*[[Filterで文字化け対策]]*[[文字化けの対処]]
----
{{amazon|4822282775}}
[[Java5]].0でだいぶ機能追加があったけれど、丁寧に説明してくれてます。
試験対策でなくても非常に有用
{{amazon|482228168X}}
ただ、試験範囲から外れちゃったところも多いので、こちらの本もあわせて読んでおくとよいかも(もったいないか?)
{{include_html [[banner_html]], "!amazon_promotion2"}}
===その他文字化けについてその他[[文字化け]]について==={{category [[Category:文字化け}}]]*[[Excel VBA 文字列をバイト配列に変換]]*[[Filterで文字化け対策]]*[[HTML javascript:を利用するとデコードされる]]*[[J2EE Tips]]*[[Java ファイルの文字コードを判別する]]*[[Javaでの文字コードの扱い]]*[[Linux バックスペースが文字化けしてしまう]]*[[Python URLエンコード]]*[[Python UnicodeEncodeError の対処]]*[[Python ファイルの文字コード]]*[[SQL Plus]]*[[WAS から Java Mail送信で文字化け]]*[[vi]]*[[画面に入力された文字コードを調べる]]*[[文字コード]]*[[文字化けの対処]]