我解析mp3標籤。如何轉換俄語西裏爾字母的字符串?
String artist
- 我不知道什麼是對編碼
Ïåñíÿ ïðî íàäåæäó
- 在俄羅斯"Песня про надежду"
例如字符串我用http://code.google.com/p/juniversalchardet/
代碼:
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;
}
和隱蔽
new String(text.getBytes(encoding), "cp1251");
- 但這不行。
如果我使用UTF-16
new String(text.getBytes("UTF-16"), "cp1251")
回報 「юяПесняпронадежду」 空間 - 不爲CHAR空間
編輯:
這個第一讀字節
byte[] abyFrameData = new byte[iTagSize];
oID3DIS.readFully(abyFrameData);
ByteArrayInputStream oFrameBAIS = new ByteArrayInputStream(abyFrameData);
的String =新字符串(abyFrameData, 「????」);
你是如何得到的字符串文本參數?或許這個問題與你如何創建探測器的輸入有關。 java字符串總是UTF-16,所以這裏已經有一些字符轉換了。 – stevevls 2011-05-16 12:06:37
'new String(text.getBytes(「UTF-16」),「cp1251」)'不會做你認爲它做的事。它實際上做的是取一個現有的字符串,檢索它的字節爲UTF-16,然後嘗試通過假設這些字節字節是CP1251來創建一個新字符串。這是保證是錯誤的。 – Anon 2011-05-16 12:12:39
@ stevevls,嗯java字符串總是UTF-16,而不是Unicode http://download.oracle.com/javase/tutorial/i18n/text/index.html – mKorbel 2011-05-16 12:15:16