Table des matières
1. L'origine du flux de caractères
2. Table de codage
Jeu de caractères :
Jeu de caractères Unicode :
Règles d'encodage UTF-8 :
3. Problèmes d'encodage et de décodage dans les chaînes
Méthode d'encodage (IDEA) :
Méthode de décodage (IDEA) :
IV. Problèmes d'encodage et de décodage du flux de caractères
四、字符流写数据的五种方法
五、字符流读数据的两种方法
Maison Java javaDidacticiel Exemple d'analyse de flux de caractères Java

Exemple d'analyse de flux de caractères Java

Apr 28, 2023 pm 04:40 PM
java

    1. L'origine du flux de caractères

    Comme il n'est pas très pratique d'utiliser un flux d'octets pour contrôler le chinois, Java fournit un flux de caractères pour contrôler le chinois

    Principe d'implémentation : flux d'octets + table d'encodage

    Pourquoi utiliser Is y a-t-il un problème lors de la copie de fichiers texte contenant des caractères chinois dans le flux d'octets ?

    Parce que l'opération sous-jacente fusionnera automatiquement les octets en chinois

    Comment identifier que l'octet est chinois ?

    Lorsque des caractères chinois sont stockés, qu'il s'agisse d'UTF-8 ou de GBK, le premier octet est un nombre négatif à inviter

    2. Table de codage

    Jeu de caractères :

    est un ensemble de tous les caractères pris en charge par le système, y compris les caractères nationaux, les signes de ponctuation, les symboles graphiques, les chiffres, etc.

    Pour stocker et reconnaître avec précision divers symboles de jeux de caractères, un ordinateur a besoin d'un codage de caractères. Un ensemble de jeux de caractères doit avoir au moins un ensemble d'encodages de caractères

    Caractère commun. les jeux incluent le jeu de caractères ASCII, le jeu de caractères GBXXX, le jeu de caractères Unicode, etc.

    GBK : La table de codes chinois la plus couramment utilisée est une spécification étendue basée sur la norme GB2312. Elle utilise un schéma de codage à deux octets et contient un total de. 21 003 caractères chinois. Il est entièrement compatible avec la norme GB2312, il prend également en charge les caractères chinois traditionnels, les caractères chinois japonais et coréens, etc.

    GB18030 : La dernière table de codes chinois, contenant 70 244 caractères chinois, utilisant un codage multi-octets, chaque caractère. peut être composé de 1, 2 ou 4 octets. Prend en charge les caractères des minorités ethniques chinoises, ainsi que les caractères chinois traditionnels, les caractères chinois japonais et coréens, etc.

    Jeu de caractères Unicode :

    Conçu pour exprimer n'importe quel caractère dans n'importe quelle langue, il s'agit d'un standard dans l'industrie, également connu comme Unicode et Standard Universal Code ; il utilise jusqu'à 4 octets de chiffres pour représenter chaque lettre, symbole ou texte. Il existe trois schémas d'encodage : UTF-8, UTF-16, UTF32. Le plus couramment utilisé est UTF-8

    UTF-8 : il peut être utilisé pour représenter n'importe quel caractère de la norme Unicode. Il est utilisé pour le courrier électronique et le Web. pages et autres stockages ou transmissions. Dans les applications de fichiers, l'encodage est préféré. L'Internet Working Group exige que tous les protocoles Internet prennent en charge le format de codage UTF-8. Il utilise un à quatre octets pour encoder chaque caractère

    Règles d'encodage UTF-8 :

    128 caractères US-ASCII, n'ont besoin que d'un octet pour encoder

    Caractères latins et autres, ont besoin de deux octets pour encoder

    Caractères les plus couramment utilisés (y compris le chinois) sont codés sur trois octets

    D'autres caractères auxiliaires UniCode rarement utilisés sont codés sur quatre octets

    Résumé : quels types de règles sont utilisés lors de l'encodage et les règles correspondantes doivent être utilisées pour le décodage, sinon elles seront tronquées

    3. Problèmes d'encodage et de décodage dans les chaînes

    Méthode d'encodage (IDEA) :

    byte[] getBytes() : utilisez le jeu de caractères par défaut de la plateforme pour encoder la chaîne en une série d'octets et convertir le résultat stocké dans un nouveau tableau d'octets

    byte[] getBytes(String charsetName) : Utilisez le jeu de caractères spécifié pour encoder la chaîne dans une série d'octets et stockez le résultat dans un nouveau tableau d'octets

    Méthode de décodage (IDEA) :

    String( byte[]bytes) : construit une nouvelle chaîne en décodant le tableau d'octets spécifié à l'aide du jeu de caractères par défaut de la plateforme

    String(byte[]bytes,String charsetName) : décodant le tableau d'octets spécifié à l'aide du jeu de caractères par défaut de la plateforme. Tableau d'octets à construire une nouvelle chaîne

    Le format d'encodage par défaut dans IDEA est UTF-8

    IV. Problèmes d'encodage et de décodage du flux de caractères

    Classe de base abstraite du flux de caractères :

    Lecteur : classe abstraite du flux d'entrée de caractères

    Writer : classe abstraite de flux de sortie de caractères

    Deux classes liées aux problèmes d'encodage et de décodage dans le flux de caractères :

    InputStreamReader : il s'agit d'un pont entre le flux d'octets et le flux de caractères : il lit les octets et utilise le jeu de caractères spécifié pour le décoder en caractères. Le jeu de caractères qu'il utilise peut être spécifié par son nom, peut être spécifié explicitement ou peut accepter le jeu de caractères par défaut de la plate-forme

    Méthode Constructor :

    InputStreamReader(InputStream in) Créer un InputStreamReader qui utilise le jeu de caractères par défaut .
    InputStreamReader(InputStream in, String charsetName) Crée un InputStreamReader qui utilise un jeu de caractères nommé.

    OutputStreamWruter : C'est un pont entre le flux de caractères et le flux d'octets : il utilise un jeu de caractères personnalisé pour coder les caractères écrits en octets. Le jeu de caractères qu'il utilise peut être spécifié par son nom ou explicitement spécifié. jeu de caractères par défaut de la plateforme

    Méthode de construction :

    OutputStreamWriter(OutputStream out) Créez un OutputStreamWriter en utilisant l'encodage de caractères par défaut.
    OutputStreamWriter(OutputStream out, String charsetName) Créez un OutputStreamWriter qui utilise un jeu de caractères nommé.
    public class ConversionStreamDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的InputStreamReader\OutputStreamWriter
            InputStreamReader ipsr = new InputStreamReader(new FileInputStream("E:\\abc.txt"));
            OutputStreamWriter opsw = new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));
            //写入数据
            opsw.write("你好啊");
            opsw.close();
            //读数据,方式一:一次读取一个字节数据
            int ch;
            while ((ch = ipsr.read()) != -1) {
                System.out.print((char) ch);
            }
            ipsr.close();
    
        }
    }
    Copier après la connexion

    四、字符流写数据的五种方法

    方法名说明
    void write(int c) 写一个字符
    void write(char[] cbuf)写入一个字符数组
    void write(char[] cbuf,int off,int len)写入字符数组的一部分
    void write(String str)写入一个字符串
    void write(String str,int off,int len)写入一个字符串的一部分

    字符流写数据需要注意缓冲区的问题,如果想要将缓冲区的数据加载出来需要在写入方法后加上刷新方法flush();

    前三个方法与字节流写入方法使用相同,这里重点介绍下面两种方式

    public class OutputStreamWriterDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的OutputStreamWriter对象
            OutputStreamWriter opsw=new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));
            //方式一:写入一个字节
            opsw.write(97);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式二:写入一个字符数组
            char[]ch={'a','b','c','二'};
            opsw.write(ch);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式三:写入一个字符数组的一部分
            opsw.write(ch,0,2);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式四:写入一个字符串
            opsw.write("一二三");
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式五:写入一个字符串的一部分
            opsw.write("三四五",1,2);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
        }
    }
    Copier après la connexion

    五、字符流读数据的两种方法

    方法名说明
    int read() 一次读取一个字符数据
    int read(char[] cbuf)一次读取一个字符数组数据
    public class InputStreamReadDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的InputStreamReader
            InputStreamReader ipsr=new InputStreamReader(new FileInputStream("E:\\abc.txt"));
            //读取数据,方式一一次读取一个字符数据
            int ch;
            while ((ch=ipsr.read())!=-1){
                System.out.print((char) ch);
            }
            ipsr.close();
            //方式二:一次读取一个字符数组数据
            char []ch=new char[1024];
            int len;
            while ((len=ipsr.read(ch))!=-1){
                System.out.print(new String(ch,0,len));
            }
            ipsr.close();
        }
    }
    Copier après la connexion

    小结:如果使用默认编码格式的话,那么字符输入流InputStreamReader可以使用子类FileReader来替代,字符输出流OutputStreamWriter可以使用其子类FileWriter来替代,两者在使用默认编码格式的情况下作用一致。

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Comment déverrouiller tout dans Myrise
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

    Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

    Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

    Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

    Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

    Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

    Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

    Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

    Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

    Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

    Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

    Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

    Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

    Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

    See all articles