Cet articleprésentel'utilisation de java.nio.charset.CharsetDecoder pour identifier automatiquement la jeu de caractèresméthode
recherche les méthodes qui peut être utilisé sur Internet. Le moyen le plus efficace d'identifier automatiquement les jeux de caractères est d'utiliser la bibliothèque de classes tierce jchardet. Il existe également cpdetector, qui utilise en fait jchardet. J'ai accidentellement découvert que java.nio.charset.CharsetDecoder de jdk peut être utilisé pour identifier les jeux de caractères.
1. Principe
Généralement, deux méthodes sont utilisées pour construire InputStreamReader :
InputStreamReader reader = new InputStreamReader(in, charsetName);
ou
InputStreamReader reader = new InputStreamReader(in, charset);
Si le jeu de caractères ne correspond pas, des caractères tronqués seront affichés.
Il existe également une méthode de construction, qui consiste à utiliser CharsetDecoder :
CharsetDecoder cd = charset.newDecoder(); InputStreamReader reader = new InputStreamReader(in, cd);
S'il n'y a pas de correspondance à ce moment-là, lève une exception :
java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:277) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:338) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) ....
De cette façon, il peut être utilisé comme détection de jeu de caractères.
2. Utilisation d'AutoCharsetReader
AutoCharsetReader est une classe écrite sur la base des principes ci-dessus et en référence à InputStreamReader hérite de <. 🎜>Reader , peut être vu comme InputStreamReader adaptatif Charset.
AutoCharsetReader ar= new AutoCharsetReader(in);char c = ar.read(); ...char[] cbuf = new char[2000]; ar.read(cbuf); ... BufferedReader br = new BufferedReader(ar); br.readLine(); ...
Field field = new TextField("content", new AutoCharsetReader(file));
Charset charset = ar.charset();
3. Jeu de caractères alternatif
En raison de l'utilisation de plusieurs tente de finaliser le jeu de caractères, des alternatives doivent donc être fournies. Les jeux de caractères alternatifs par défaut fournis par le code actuel sont les suivants :private final static String[] _defaultCharsets = { "US-ASCII", "UTF-8", "GB2312", "BIG5", "GBK", "GB18030", "UTF-16BE", "UTF-16LE", "UTF-16", "UNICODE"};
AutoCharsetReader ar = new AutoCharsetReader(in).setCharset("ascii", "utf-8", "gbk");
4. Uniquement pour la détection du jeu de caractères
peut être utilisé uniquement pour la détection du jeu de caractères :charset = AutoCharsetReader.quickDetect(file.toURI().toURL(), charsets); or: charset = AutoCharsetReader.deepDetect(file.toURI().toURL(), charsets, stops);
stops à {"utf-8", "gbk"}. S'il est null, vous devez tout lire.
5. Autres
Afin d'améliorer l'efficacité, cette classe dispose d'un tampon Si le décodage du jeu de caractères initial échoue, il n'y en a pas. il faut relire io. La taille du tampon par défaut est 8192. Vous pouvezdéfinir vous-même la taille du tampon lors de la construction de l'objet Si le paramètre est inférieur à 16, définissez-le sur 16.
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!