| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
*[https://www.typea.info/tips_/index.php/Java%E3%81%A7%E3%81%AE%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%89%B1%E3%81%84 Javaでの文字コードの扱い]
===Javaに限らず、厄介な[[文字化け]]について===
----
[[Category:文字化け]]
{{amazon|481633243X}}
===基本事項===
----
====Stringクラス====
----
=====仕様では、[http://www.y-adagio.com/public/standards/tr_javalang2/typesValues.doc.html#26992 String クラス]はUnicode文字の並びを表す=====
----
*String クラスのソースコード(%JAVA_HOME%/src.zip)を見ると、Unicode文字の並びをchar型の配列として保持している。
*[http://e-words.jp/w/Unicode.html char型|http://www.y-adagio.com/public/standards/tr_javalang2/typesValues.doc.html#48440]は、[Unicode]文字を表す16ビット符号無し整数で、'\u0000'~'\uffff' すなわち 0~65535を表現できる
====ソースコードの変換====
----
=====ソースコードのコンパイル時、プラットフォームの[[文字コード]]やファイルの[[文字コード]]に依存してしまう。=====
----
*[[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エスケープ]に変換する。
=====プロパティファイルの変換=====
----
*プロパティファイル等、Java プログラムで利用するファイルも、ソースコード同様、[http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/native2ascii.html native2ascii] を使用して文字コードを変換する。
プログラムの実行時にファイルを読込む必要がある場合等は、ファイルに合わせた[[文字コード]]でファイルを読まなければ文字化けしてしまう場合がある。
====[[文字コード]]を指定してファイルを読む====
----
=====FileInputStream を利用することにより、[[文字コード]]を指定してファイルを読むことができる=====
----
Buffered[[R]]eader reader
= new Buffered[[R]]eader(new InputStream[[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>
====エンコード====
----
=====エンコード方式(文字セット)を指定して、Stringからバイト列を取得する=====
----
byte[] String.getBytes(String charsetName)
 
*java.lang.StringCoding.encode(String charsetName, char[] value ...)
*sun.io.CharToByteConverter
====デコード====
----
=====デコード方式(文字セット)を指定して、バイト列からStringを生成する=====
----
new String(byte[] bytes, String charsetName)
*java.lang.StringCoding.decode(String charsetName, byte[] bytes ...)
====[[文字コード]]の変換====
----
=====上記を使用して、[[文字コード]]を変換する=====
----
String newCode = new String(oldCode.getBytes("Cp930"), "MS932");
====デフォルトエンコード(デコード)====
----
=====エンコード(デコード)方式を指定しないと、プラットフォームのデフォルト[[エンコーディング]]が使用される。=====
----
システムプロパティ
====[[文字コード]]の16進ダンプ====
----
=====デバッグ用=====
----
public static String stringDump(String s) {
if (s == null) return "";
}
====[[文字コード]]の16進ダンプを復元====
----
=====デバッグ用=====
----
public static String decodeDumpString(String s) {
StringBuffer result = new StringBuffer();
====[[エンコーディング]]====
----
*[[文字コード]]
*[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]
=====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://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の[[文字コード]]の違いについて=====
----
*http://www-1.ibm.com/support/doc[[vi]]ew.wss?uid=std3b32aea767378855449256f010028e2f4
===マルチパートのエンコード===
----
====ファイルアップロードの場合にファイル名が[[文字化け]]する====
----
=====Form=====
----
<form id="formUpload" action="upload.html" method="POST" enctype="multipart/form-data" >
<input name="attach_file" />
=====[[文字コード]]をiso-8859-1として変換=====
----
*http://ja.wikipedia.org/wiki/ISO/[[IE]]C_8859-1
*[[Spring]] の場合
====ファイルダウンロード時にファイル名が[[文字化け]]する====
----
//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
===Shift_JISの取り扱い===
----
*MS932またはSJISの別名として定義されており、どちらの別名となるかはバージョンに依存している(JDK 1.3ではMS932だが、JDK 1.4ではSJISとなる)。
=====円記号=====
----
*Shift_JISでは、半角円記号とバックスラッシュを区別しないが、する[[文字コード]]体系だと見た目上は、半角円記号なのに、Stringのメソッドが正しく動作しない(ように見える)
String str1 = "\u005c\u005c";
false
===ファイルの[[文字コード]]を判別する===
----
*[[Java ファイルの文字コードを判別する|ファイルの文字コードを判別する]]
===[[その他]]===
----
{{amazon|4774107808}}
====[[Webアプリケーション]]の文字化け対策====
----
*[[Filterで文字化け対策]]
*[[文字化けの対処]]
----
{{amazon|4822282775}}
[[Java5]].0でだいぶ機能追加があったけれど、丁寧に説明してくれてます。
===その他[[文字化け]]について===
----
[[Category:文字化け]]
*[[Excel VBA 文字列をバイト配列に変換]]

案内メニュー