Я не уверен, что именно вы спрашиваете, но я предполагаю, что вы спрашиваете, как преобразовать некоторые символы из Unicode в 8-битный набор символов.(например, ISO-8859-1 - это набор символов для западноевропейских языков, таких как английский).
Я не знаю ни одного способа автоматического определения соответствующей 8-битной кодировки, поэтому я посмотрел однуваших персонажей (здесь http://unicode.org/charts/), и я вижу, что эти персонажи бенгальцы.
Я думаю эквивалентный 8-битный набор символов для бенгали известен как x-iscii-be
. У меня не установлено это в моей системе, поэтому я не смог успешно выполнить преобразование.
РЕДАКТИРОВАТЬ: Java не поддерживает кодировку x-iscii-be
, но яоставлю оставшуюся часть этого ответа в целях иллюстрации.Список поддерживаемых кодировок см. В http://download.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html.
EDIT2: Android, безусловно, не гарантирует поддержку этой кодировки (единственная 8-битная кодировка, которую он гарантирует, это ISO-8859-1).См .: http://developer.android.com/reference/java/nio/charset/Charset.html.
* Итак, я думаю, вам следует запустить некоторый код, определяющий кодировку, на бенгальском устройстве Android - возможно, он поддерживает эту кодировку.Все, что вам нужно, в моем примере кода.*
Чтобы Java могла преобразовать ваши данные в другой набор символов, все, что вам нужно сделать в Java, - это проверить, установлен ли нужный набор символов, а затем указать нужный набор символов при преобразованииСтрока в байтах.
Само преобразование было бы чрезвычайно простым:
str.getBytes("x-iscii-be");
Итак, вы видите, что сама строка хранится в своего рода «нормализованной» форме (то есть defaultCharset), и вы можететрактовать getBytes (charsetName) как «альтернативный формат вывода» для String. Извините - плохое объяснение!
В вашей ситуации, возможно, вам просто нужно назначить Charset для resultView, и фреймворк сработает для вас ...
Вот некоторый тестовый код, который я собрал, чтобы проиллюстрировать эту мысль и проверить, поддерживается ли данный набор символов в системе.
У меня есть этот код для вывода байтовых массивов в виде шестнадцатеричных строк, поэтомучто вы можете видеть, что после преобразования данные различаются.
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.util.Map.Entry;
import java.util.SortedMap;
public class UnicodeTest {
public static void main(String[] args) throws UnsupportedEncodingException {
testWestern();
testBengali();
}
public static void testWestern() throws UnsupportedEncodingException {
String unicodeStr= "\u00c2"; //This is a capital A with an accent.;
String charsetName= "ISO-8859-1";
System.out.println("Input (outputted as default charset - normally unicode): "+unicodeStr);
attempt8bitCharsetConversion(unicodeStr, charsetName);
}
public static void testBengali() throws UnsupportedEncodingException {
String unicodeStr = "\u0986\u09AE\u09BF \u0995\u09BF\u0982\u09AC\u09A6\u09A8\u09CD\u09A4\u09BF\u09B0 \u0995\u09A5\u09BE \u09AC\u09B2\u099B\u09BF";
String charsetName= "x-iscii-be";
System.out.println(unicodeStr);
attempt8bitCharsetConversion(unicodeStr, charsetName);
}
public static void attempt8bitCharsetConversion(String input, String charsetName) throws UnsupportedEncodingException {
SortedMap<String, Charset> availableCharsets = Charset
.availableCharsets();
for (Entry<String, Charset> entry : availableCharsets.entrySet()) {
if (charsetName.equalsIgnoreCase(entry.getKey())) {
System.out.println("HEXED input : "+ toHex(input.getBytes(Charset.defaultCharset().name())));
System.out.println("HEXED output: "+ toHex(input.getBytes(entry.getKey())));
}
}
throw new UnsupportedEncodingException(charsetName+ " is not supported on this system");
}
public static String toHex(byte[] input) throws UnsupportedEncodingException {
return String.format("%x", new BigInteger(input));
}
}
См. также здесь для получения дополнительной информации о преобразовании кодировки: http://download.oracle.com/javase/tutorial/i18n/text/string.html
Наборы символов - сложное дело, поэтому, пожалуйста, прости мойзамысловатый ответ.
HTH