ホームページ よくある問題 バッファされた入力ストリームが文字化けした場合はどうすればよいでしょうか?

バッファされた入力ストリームが文字化けした場合はどうすればよいでしょうか?

Mar 22, 2023 am 11:22 AM
文字化け

bufferedinputstream乱码是因为BufferedInputStream读取的是字节byte,那么如果读取的数据比较长,并且没有一次性读完,就会出现乱码,其解决乱码问题的办法就是用BufferedReader来读取,其读取代码如“BufferedReader reader = new BufferedReader (...)”。

バッファされた入力ストリームが文字化けした場合はどうすればよいでしょうか?

本教程操作环境:Windows10系统、Java8.0、Dell G3电脑。

bufferedinputstream乱码怎么办?

BufferedInputStream和BufferedOutputStream用法解决乱码

昨晚写了一个把所有的简体汉字转换成繁体并且取出拼音的程序,在IO流操作中遇到了中文乱码问题。

下面是我写的程序

package com.java.utils.charactor;
 
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
 
/**
 * 简繁体转换
 *
 * @author pengjianbo <pengjianbosoft@gmail.com>
 * $Id$
 */
public class SimTradConvert {
 
    public SimTradConvert() throws Exception {
 
        File simplFile = new File(
                "D:\\android\\JavaUtils\\src\\com\\java\\utils\\charactor\\simplified.txt");
        FileInputStream simplFis = new FileInputStream(simplFile);
        BufferedInputStream simplBis = new BufferedInputStream(simplFis);
        BufferedReader simplBr = new BufferedReader(new InputStreamReader(simplBis));
        StringBuffer simplsb = new StringBuffer();
 
        byte[] simplb = new byte[1024];
        while ((simplBis.read(simplb)) != -1) {
            simplsb.append(new String(simplb));
        }
        
        simplFis.close();
        simplBis.close();
        
        
        File tradFile = new File(
                "D:\\android\\JavaUtils\\src\\com\\java\\utils\\charactor\\traditional.txt");
        FileInputStream tradFis = new FileInputStream(tradFile);
        BufferedInputStream tradBis = new BufferedInputStream(tradFis);
        StringBuffer tradsb = new StringBuffer();
 
        byte[] tradb = new byte[1024];
        while ((tradBis.read(tradb)) != -1) {
            tradsb.append(new String(tradb));
        }
        
        tradBis.close();
        tradFis.close();
        
        System.out.println(simplsb.toString());
        /*CnGetPinyin pinyin = new CnGetPinyin();
        //连接SQLite的JDBC
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:pai.db");
        Statement stat = conn.createStatement();
        for(int i = 0; i < simplsb.length() -1; i++ ) {
            
            stat.executeUpdate( "insert into CNLang(pinyin,simp,trad) values(&#39;" + pinyin.getPinyin(simplsb.substring(i, i + 1)) + "&#39;,&#39;"
                                + simplsb.substring(i, i + 1) + "&#39;,&#39;" + tradsb.substring(i, i + 1) + "&#39;)");
            System.out.println("正在添加:" + simplsb.substring(i, i + 1) + "-->"  + tradsb.substring(i, i + 1));
            if( i > simplsb.length() -1 ) {
                stat.close();
                conn.close();
            }
        }*/
        
    }
 
    public static void main(String[] args) throws Exception {
        new SimTradConvert();
    }
 
}
ログイン後にコピー

在我的这个程序中,用BufferedInputStream,而且用了read(byte[]),就出了读取出来现在部分的中文乱码,我想是我这个byte[] tradb = new byte[1024];缓冲大小设置的问题,试图去更改byte[]的在小,结果出现乱码的地方和原先的不一样了。也就说明了,在缓冲的末尾的时候出了问题,末尾的那个字节容纳不了一个汉字,所以出现的乱码。我想如果用read()去读取的话应该不会出现这个问题的(没试过)。像我的这种读取大量的中文数据我想我宁愿用read去读,大不了就开一个线程嘛。

下面是我看到网上别人写的博客:后来在网上找一下资料,转载如下:

BufferedInputStream和BufferedOutputStream是过滤流,需要使用已存在的节点来构造,即必须先有InputStream或OutputStream,相对直接读写,这两个流提供带缓存的读写,提高了系统读写效率性能.BufferedInputStream读取的是字节byte,因为一个汉字占两个字节,而当中英文混合的时候,有的字符占一个字节,有的字符占两个字节,所以如果直接读字节,而数据比较长,没有一次读完的时候,很可能刚好读到一个汉字的前一个字节,这样,这个中文就成了乱码,后面的数据因为没有字节对齐,也都成了乱码.所以我们需要用BufferedReader来读取,它读到的是字符,所以不会读到半个字符的情况,不会出现乱码.

package com.pocketdigi;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        File f = new File("d:/a.txt");
        FileOutputStream fos = new FileOutputStream(f);
        // 构建FileOutputStream对象,文件不存在会自动新建
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bos.write("1我是中文".getBytes());
        bos.close();
        // 关闭输出流,写入数据,如果下面还要写用flush();
        // 因为是BufferOutputStream链接到FileOutputStream,只需关闭尾端的流
        // 所以不需要关闭FileOutputStream;
        FileInputStream fis = new FileInputStream(f);
        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedReader reader = new BufferedReader (new InputStreamReader(bis));
        //之所以用BufferedReader,而不是直接用BufferedInputStream读取,是因为BufferedInputStream是InputStream的间接子类,
        //InputStream的read方法读取的是一个byte,而一个中文占两个byte,所以可能会出现读到半个汉字的情况,就是乱码.
        //BufferedReader继承自Reader,该类的read方法读取的是char,所以无论如何不会出现读个半个汉字的.
        StringBuffer result = new StringBuffer();
        while (reader.ready()) {
            result.append((char)reader.read());
        }
        System.out.println(result.toString());
        reader.close();
 
 
    }
 
}
ログイン後にコピー

推荐学习:《Java视频教程

以上がバッファされた入力ストリームが文字化けした場合はどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

文字化けした単語のページ番号を解決する方法 文字化けした単語のページ番号を解決する方法 Jun 25, 2023 pm 03:23 PM

Word のページ番号が文字化けする場合の解決策: 1. Word 文書を開き、左上隅にある [ファイル] オプションをクリックします; 2. [詳細] オプションを選択し、[オプション] ボタンをクリックします; 3. [詳細] を選択します。 Word のオプション内; 4. . 「文書の内容を表示」の「フィールド値の代わりにフィールドコードを表示」を見つけて、先頭のチェックを外し、「OK」をクリックしてホームページに戻ります。

Linuxで中国語の文字化けを解決する方法 Linuxで中国語の文字化けを解決する方法 Feb 21, 2024 am 10:48 AM

Linux の中国語の文字化け問題は、中国語の文字セットとエンコーディングを使用する場合によく見られる問題です。文字化けは、ファイルのエンコード設定が正しくない、システム ロケールがインストールまたは設定されていない、端末の表示設定エラーなどが原因で発生する可能性があります。この記事では、いくつかの一般的な回避策を紹介し、具体的なコード例を示します。 1. ファイルのエンコード設定を確認します。ファイルのエンコードを表示するには file コマンドを使用します。ターミナルで file コマンドを使用して、ファイルのエンコードを表示します: file-ifilename。出力に「charset」がある場合

Tomcat 起動時に文字化けしたコードを解決する方法 Tomcat 起動時に文字化けしたコードを解決する方法 Dec 26, 2023 pm 05:21 PM

Tomcat 起動時の文字化けの解決策: 1. Tomcat の conf 設定ファイルを変更する; 2. システム言語を変更する; 3. コマンド ライン ウィンドウのエンコードを変更する; 4. Tomcat サーバーの設定を確認する; 5. プロジェクトのエンコードを確認する; 6. ログを確認するファイル; 7 、他の解決策を試してください。詳細な導入: 1. Tomcat の conf 構成ファイルを変更し、Tomcat の conf ディレクトリを開き、「logging.properties」ファイルなどを見つけます。

Windows10で中国語が文字化けする問題を解決する方法 Windows10で中国語が文字化けする問題を解決する方法 Jan 16, 2024 pm 02:21 PM

Windows 10では文字化けが多発しております。多くの場合、この背後にある理由は、オペレーティング システムが一部の文字セットのデフォルト サポートを提供していないか、設定された文字セット オプションにエラーがあることです。適切な薬を処方するために、実際の操作手順を以下で詳しく分析します。 Windows 10 の文字化けコードを解決する方法 1. 設定を開いて「時刻と言語」を見つけます 2. 次に「言語」を見つけます 3. 「言語設定の管理」を見つけます 4. ここで「システム地域設定の変更」をクリックします 5. 図のようにボックスをチェックしますそして、「必ず確認してください」をクリックします。

Linux tty で中国語文字化けが発生する場合の対処方法 Linux tty で中国語文字化けが発生する場合の対処方法 Mar 16, 2023 am 09:20 AM

Linux tty の中国語文字化けの解決策: 1. 「sudo apt-get install fbterm」コマンドでフォント fbterm をダウンロードする; 2. 「sudo fbterm」コマンドを実行する; 3. フォントとフォント サイズを「font-names」に変更する=Ubuntu Mono font-size=14」で十分です。

win11のシステムドキュメントが文字化けする問題を解決する方法 win11のシステムドキュメントが文字化けする問題を解決する方法 Jun 29, 2023 pm 06:29 PM

win11でテキストドキュメントが文字化けする問題を解決するにはどうすればよいですか?多くのユーザーがwin11システムを使用していると、テキストドキュメントが文字化けして正常に読むことができなくなり、この問題を解決する方法が分からない友人も多くいます。実際、この方法は難しいことではありません。以下に、Windows 11 のシステム ドキュメントが文字化けする問題を解決する手順を編集者がまとめました。何かのヒントになれば幸いです。文字化けした Windows 11 システム ドキュメントを解決する手順: 1. まず、win11 のコントロール パネルを開き、下の検索ボックスに「コントロール パネル」と入力し、[検索] をクリックしてコントロール パネルに入ります。 2. パネルに入ったら、時計とエリアを見つけてクリックして入力し、エリア オプションをクリックします。 3. 入力後、管理パネルをクリックし、システムの地域設定の変更をクリックします。

filezillaの文字化けを解決する方法 filezillaの文字化けを解決する方法 Nov 20, 2023 am 10:16 AM

filezilla の文字化けの解決策は次のとおりです: 1. エンコード設定を確認する; 2. ファイル自体を確認する; 3. サーバー構成を確認する; 4. 他の転送ツールを試す; 5. ソフトウェアのバージョンを更新する; 6. ネットワークの問題を確認する; 7 . 技術サポートを求めてください。 FileZillaの文字化け問題を解決するには、多方面から始めて徐々に原因を究明し、それに応じた対策を講じて修復する必要があります。

dllファイルを開くときに文字化けする問題を解決する編集方法 dllファイルを開くときに文字化けする問題を解決する編集方法 Jan 06, 2024 pm 07:53 PM

多くのユーザーがコンピュータを使用していると、拡張子が dll のファイルがたくさんあることに気づきますが、そのファイルの開き方が分からないユーザーも多いので、知りたい方は以下を参照してください。 dll ファイルを開いて編集するには: 1. 「exescope」というソフトウェアをダウンロードし、インストールします。 2. 次に、dll ファイルを右クリックし、[exescope でリソースを編集] を選択します。 3. ポップアップ エラー プロンプト ボックスで [OK] をクリックします。 4. 次に、右側のパネルで、各グループの前にある「+」記号をクリックして、グループに含まれるコンテンツを表示します。 5. 表示したい dll ファイルをクリックし、「ファイル」をクリックして「エクスポート」を選択します。 6. そうすれば、次のことができます