ホームページ Java &#&ベース Javaでbyte[]をStringに変換すると文字化けが発生する

Javaでbyte[]をStringに変換すると文字化けが発生する

Nov 27, 2019 am 09:28 AM
java string 文字化け

Javaでbyte[]をStringに変換すると文字化けが発生する

まず、一般的に使用される byte[] を String に直接変換するのは非常に簡単です:

public static void main(String[] args) {  
String str="我是中国人";  
byte[] arr=str.getBytes();  
System.out.println("打印:"+arr);
for(byte e : arr) {
System.out.print(e + " ");
}
String str2=new String(arr);  
System.out.println("\n打印2:"+str2);  
}
ログイン後にコピー

Java 関連のビデオの推奨事項: Java learning

たとえば、上記の出力結果は次のとおりです。

打印:[B@15db9742
-50 -46 -54 -57 -42 -48 -71 -6 -56 -53 
打印2:我是中国人
ログイン後にコピー

これを見ると、エンコーディングがわかります。 byte は 1 バイト、漢字は 2 バイトです。したがって、5 つの漢字には 10 バイト タイプのデジタル ストレージが必要です。次に、数字が漢字に変換され、標準化のプロセスが行われます。

では、Java は文字エンコーディングをどのように処理するのでしょうか?

JAVA は独自の String クラスを使用するため、String クラス オブジェクトはコーディング テーブルを指定する必要がありません。なぜ、一連の数字がそれぞれどの文字を表しているのかを知ることができるのでしょうか?これは、String 内の文字情報が UNICODE エンコードで格納されているためです。文字(単一の文字であることに注意してください)を表現するために、JAVA には char データ型もあり、そのサイズは 8 桁の 16 進数 2 桁の固定長で、0 ~ 65535 です。その目的は、UNICODE の文字に対応させることです。

文字列内の UNICODE 番号を取得したい場合は、getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) メソッドを使用して char[] を取得できます。 、この char[] は、UNICODE エンコード テーブルに従ってエンコードされた String 文字、数値を表します。

byte[ ] を String に変換するとコードが文字化けするのはなぜですか?

明らかに、上で述べたように、コーディング標準は異なります。たとえば、GB2312 標準における中国語の単語「dang」は、2 つの 8 桁の数字 0xB5 と 0xB1 で表されます。英語のシステムには GB2312 エンコーディング テーブルがないため、0xB5、0xB1 を与えると ASCII として扱われます。 Javaに入れると独自のUNICODE仕様に従って処理するため、仕様が異なると文字化けというおかしな結果が出てしまいます。

では、byte[] を String に変換する際の文字化けの問題を解決するにはどうすればよいでしょうか?

byte[] がどこから来たかによって異なります。他の場所に送信するためにピクチャを byte[] に変換し、次に String ストリーム オブジェクトに変換する必要があることがよくありますが、受信側はそれを byte[] に変換してからピクチャに変換します。

1. byte[] を直接送信する場合、byte[] が長すぎるとデータ損失が発生します。すべてのバイトの組み合わせを char にマッピングできるわけではないためです。

2. 共通の Base64 エンコーディング仕様を使用します。 Base64 のエンコード仕様は、一般的な文字を 6 ビットのバイナリ表現に変換することです (64 が一般的に使用されるため、base64 と呼ばれます)。書き方としては、以下のような既製のツールクラスがあります。

import org.apache.commons.codec.binary.Base64;  
public class UtilHelper {     
    //base64字符串转byte[]  
    public static byte[] base64String2ByteFun(String base64Str){  
        return Base64.decodeBase64(base64Str);  
    }  
    //byte[]转base64  
    public static String byte2Base64StringFun(byte[] b){  
        return Base64.encodeBase64String(b);  
    }  
}
ログイン後にコピー

これにより、byte[] と String 間の標準的な変換が保証されます。

その他の関連記事とチュートリアルをお勧めします: Java ゼロベース入門

以上がJavaでbyte[]をStringに変換すると文字化けが発生するの詳細内容です。詳細については、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles