[JAVA] Créez votre propre encodage pour String.getBytes ()

Créez votre propre encodage pour String.getBytes ()

private static final Map<Character, byte[]>  conversionCharsetMap = new LinkedHashMap<Character, byte[]>(){
	{
		put('~', new byte[]{(byte) 0x81, (byte) 0x60});
		put('-', new byte[]{(byte) 0x81, (byte) 0x7C});
		put('¢', new byte[]{(byte) 0x81, (byte) 0x91});
		put('£', new byte[]{(byte) 0x81, (byte) 0x92});
		put('¬', new byte[]{(byte) 0x81, (byte) 0xCA});
		put('―', new byte[]{(byte) 0x81, (byte) 0x5C});
		put('∥', new byte[]{(byte) 0x81, (byte) 0x61});
	}
 };

public byte[] encode(String str, String charsetName){

	Charset charset = Charset.forName(charsetName);

	CharsetEncoder encoder = charset.newEncoder();

	CharBuffer inBuf = CharBuffer.wrap(str);

	ByteBuffer outBuf = ByteBuffer.allocate(inBuf.length() * (int)encoder.maxBytesPerChar());

	CoderResult result;

	//Boucle pendant que CoderResult renvoie une erreur
	while((result = encoder.encode(inBuf, outBuf, true)).isError()) {

		//réinitialiser
		encoder.reset();

		//Si le mappage n'est pas possible
		//Par exemple, TF-8⇒SJIS(Pas MS932)Caractères qui échouent dans ~ ∥- ¢ £ ¬― etc. Entrez ici
		if(result.isUnmappable()) {

			//Obtenez 1 caractère (caractère dont le mappage a échoué)
			char ch = inBuf.get();
			byte[] val = null;

			//Mettez le traitement de ce qu'il faut faire si le mappage échoue dans cette zone
			//Ici, le code octet pour SJIS du caractère dont le mappage a échoué est obtenu à partir de la carte.
			val = conversionCharsetMap.get(ch);


			//Mettre dans le tampon d'octets pour le résultat d'encodage
			outBuf.put(val);
		}
		//Entrée illégale
		if(result.isMalformed()) {
			//C'est fondamentalement rare.
		}
	}

	//Flash vers le tampon de résultat d'encodage
	encoder.flush(outBuf);

	//Retourner le tampon(Inverser)Revenir à la position de départ
	outBuf.flip();

	return Arrays.copyOf(outBuf.array(), outBuf.limit());
}

Recommended Posts

Créez votre propre encodage pour String.getBytes ()
Créez votre propre application Android pour l'apprentissage Java
Créez vos propres annotations Java
Créez votre propre requête de fonction Solr
Créez votre propre validateur avec Bean Validation
Utilisation du composant Talend (5) Créez votre propre composant
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
[Introduction à la structure de données Java] Créez votre propre ArrayDeque rapide pour le type primitif
Faites votre propre pomodoro
Créez une base pour votre projet de traitement par lots dans Eclipse.
Créer des fonctions avancées pour Yellowfin
Créez votre propre plugin Elasticsearch
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot