I analizar etiquetas mp3.¿Cómo convertir una cadena de letras cirílicas rusas?
String artist
- No sé lo que estaba en la codificación
Ïåñíÿ ïðî íàäåæäó
- ejemplo de cadena en ruso "Песня про надежду"
utilizo http://code.google.com/p/juniversalchardet/
código:
String GetEncoding(String text) throws IOException {
byte[] buf = new byte[4096];
InputStream fis = new ByteArrayInputStream(text.getBytes());
UniversalDetector detector = new UniversalDetector(null);
int nread;
while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
detector.dataEnd();
String encoding = detector.getDetectedCharset();
detector.reset();
return encoding;
}
y encubierta
new String(text.getBytes(encoding), "cp1251");
-pero esto no funciona.
si uso UTF-16
new String(text.getBytes("UTF-16"), "cp1251")
retorno "юя П е с н я п р о н а д е ж д у" espacio - no el espacio es CHAR
EDIT:
esta primera lectura bytes
byte[] abyFrameData = new byte[iTagSize];
oID3DIS.readFully(abyFrameData);
ByteArrayInputStream oFrameBAIS = new ByteArrayInputStream(abyFrameData);
cadena s = new String (abyFrameData, "????");
¿Cómo le va el parámetro de cadena de texto ? quizás el problema tiene que ver con la forma en que está creando la entrada al detector. Las cadenas java siempre son UTF-16, por lo que ya ha habido una conversión de caracteres en ese punto. – stevevls
'nueva cadena (text.getBytes ("UTF-16"), "CP1251")' no hace lo que usted cree. Lo que realmente hace es tomar una cadena existente, recuperar sus bytes como UTF-16, y luego intentar crear una nueva cadena pretendiendo que esos bytes de bytes son CP1251. Lo cual está garantizado que es incorrecto. – Anon
@ stevevls, hmmm Strings Java son siempre la codificación UTF-16, no Unicode http://download.oracle.com/javase/tutorial/i18n/text/index.html – mKorbel