Javaのゴミコードの問題
最近、プロジェクトを行うとき、私はしばしばJavaで文字化けしたコードの問題に遭遇したので、文字化けしたコードの問題とそれらに対処する方法を整理するために時間をかけました。ここで私はそれらを編集しました。
分析します
エンコードとデコード
エンコードは文字をバイトに変換することであり、デコードはバイトを文字に変換することです。
バイトストリームと文字ストリーム
ファイルの読み取りと書き込みはすべて、バイトストリームを介して実装されます。 Javaに文字ストリームがある場合でも、下にあるレイヤーはバイトストリームを使用しています。
ごみコードの問題が発生します
Javaで最も頻繁に使用されるキャラクターはキャラクターです。ファイルをメモリに読み取り、コンソール(バイトストリーム--->文字ストリーム)に表示すると、デコードを使用する必要があります。ファイルがUTF-8エンコーディングであり、デコード時にGBKに誤用した場合(エンコードが指定されていない場合、Javaはシステムのデフォルトエンコードを採用します)。ファイルを作成するときは、エンコード(UTF-8)を指定することが最善です。
解決
例1
バイトストリームを文字ストリームに変換するとき、エンコード形式を指定します。これは私たちのファイルもGB2312によってエンコードする必要があります
public static string read(string filename)スロー例外{inputstream is = new fileinputStream(filename); BufferedReader in = new BufferedReader(new inputStreamReader(is、 "gb2312")); //エンコード形式の文字列を指定します。 stringbuilder sb = new StringBuilder(); while((s = in.readline())!= null){sb.append(s + "/n"); } in.close(); sb.toString();}を返します例2
バイトストリームを直接読み取り、文字列を使用して文字を使用して文字に変換するときにエンコードを指定します。
パッケージcom.dy.xidian; Import java.io.fileinputStream; Import java.io.inputStream; class bufferedinputfile {public static string read(string filename)throws {@suppresswarnings( "resource")inputstream is = new fileinputstream(filename); byte [] b = new byte [1024]; is.read(b);新しい文字列(b、 "gb2312")を返します。 }} public class memoryinput {public static void main(string [] args)throws exception {string filename = "e:/html/gb2312.php";文字列s = bufferedinputfile.read(filename); System.out.println(s); }}トラップ
I/OオペレーションにはFilreaderクラスがあります。このクラスは、バイトの詳細を文字ストリームに隠しています。この方法で使用できます。 BufferedReader in = new BufferedReader(new FileReader(Filename));このようにして、文字ストリームを直接取得します。しかし、デフォルトのエンコーディング方法がFileReaderで採用されているため、エンコードを設定しなかったことがわかりました。これは非常に危険になります。デフォルトのエンコード形式がファイルのエンコードとは異なる場合、読み取りデータは文字化けする必要があります。そのため、この例のメソッドを使用して、ストリームを変換することをお勧めします。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!