OVH Cloud OVH Cloud

traduction code (encoding UTF-7)

1 réponse
Avatar
Franck
Bonjour,

Je cherche à traduire le code suivant en Java :

char base64[]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

putwchar(c)
{
if (c == '+') {
putchar('+');
putchar('-');
}
else if (c < 0x80) {
putchar(c);
}
else if (c < 0x10000) {
putchar('+');
putchar(base64[c>>10&63]);
putchar(base64[c>>4&63]);
putchar(base64[c<<2&63]);
putchar('-');
}
else if (c < 0x110000) {
c = 0xD7C0DC00 + (c >> 10 << 16 | c & 0x3FF);
putchar('+');
putchar(base64[c>>26&63]);
putchar(base64[c>>20&63]);
putchar(base64[c>>14&63]);
putchar(base64[c>>8&63]);
putchar(base64[c>>2&63]);
putchar(base64[c<<4&63]);
putchar('-');
}
}

J'ai donc ecrit la methode suivante :

public static String UTF7encode(String string) {

char[] base64 =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
char[] input = string.toCharArray();

CharBuffer buffer = CharBuffer.allocate(500);
char[] output = new char[input.length];

for (int i=0; i<input.length; i++) {
char c = input[i];
if (c == '+') {
buffer.append('+');
buffer.append('-');
}
else if (c < 0x80) {
buffer.append(c);
}
else if (c < 0x10000) {
buffer.append('+');
buffer.append(base64[c>>10&63]);
buffer.append(base64[c>>4&63]);
buffer.append(base64[c<<2&63]);
buffer.append('-');
}
else if (c < 0x110000) {
c = 0xD7C0DC00 + (c >> 10 << 16 | c & 0x3FF);
buffer.append('+');
buffer.append(base64[c>>26&63]);
buffer.append(base64[c>>20&63]);
buffer.append(base64[c>>14&63]);
buffer.append(base64[c>>8&63]);
buffer.append(base64[c>>2&63]);
buffer.append(base64[c<<4&63]);
buffer.append('-');

}
Mais je bloque sur la ligne suivante :
c = 0xD7C0DC00 + (c >> 10 << 16 | c & 0x3FF);
(sachant que c est un char)

Un petit coup de main ?

Merci d'avance

--
mailto:flefebure2.remove@this.orangecaraibe.com
E2 ici : http://www.cnbt-cdpn.org

1 réponse

Avatar
BJB
Bonjour Franck,

Tu peux trouver d'autre charset supportés (dont UTF-7) dans
http://www.freeutils.net/source/jcharset/

D'aprés ce que j'en vois, ils s'utilise comme un SPI depuis les API java
traditionelles, donc que du bonheur ;-)

Un petit vote sur
http://bugs.sun.com/bugdatabase/view_bug.do?bug_idC04013

A+
JB

Franck wrote:
Bonjour,

Je cherche à traduire le code suivant en Java :

char base64[] > "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

putwchar(c)
{
if (c == '+') {
putchar('+');
putchar('-');
}
else if (c < 0x80) {
putchar(c);
}
else if (c < 0x10000) {
putchar('+');
putchar(base64[c>>10&63]);
putchar(base64[c>>4&63]);
putchar(base64[c<<2&63]);
putchar('-');
}
else if (c < 0x110000) {
c = 0xD7C0DC00 + (c >> 10 << 16 | c & 0x3FF);
putchar('+');
putchar(base64[c>>26&63]);
putchar(base64[c>>20&63]);
putchar(base64[c>>14&63]);
putchar(base64[c>>8&63]);
putchar(base64[c>>2&63]);
putchar(base64[c<<4&63]);
putchar('-');
}
}

J'ai donc ecrit la methode suivante :

public static String UTF7encode(String string) {

char[] base64 =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();

char[] input = string.toCharArray();

CharBuffer buffer = CharBuffer.allocate(500);
char[] output = new char[input.length];

for (int i=0; i<input.length; i++) {
char c = input[i];
if (c == '+') {
buffer.append('+');
buffer.append('-');
}
else if (c < 0x80) {
buffer.append(c);
}
else if (c < 0x10000) {
buffer.append('+');
buffer.append(base64[c>>10&63]);
buffer.append(base64[c>>4&63]);
buffer.append(base64[c<<2&63]);
buffer.append('-');
}
else if (c < 0x110000) {
c = 0xD7C0DC00 + (c >> 10 << 16 | c & 0x3FF);
buffer.append('+');
buffer.append(base64[c>>26&63]);
buffer.append(base64[c>>20&63]);
buffer.append(base64[c>>14&63]);
buffer.append(base64[c>>8&63]);
buffer.append(base64[c>>2&63]);
buffer.append(base64[c<<4&63]);
buffer.append('-');

}
Mais je bloque sur la ligne suivante :
c = 0xD7C0DC00 + (c >> 10 << 16 | c & 0x3FF);
(sachant que c est un char)

Un petit coup de main ?

Merci d'avance