2015-05-10 2 views
3

Я не могу найти решение этих «простых» действия:Android - сцепить два разных языка натягивает

Я пытаюсь добавить 2 строки, чтобы получить полный путь к файлу (папки и имя файла):

String a = /storage/emulated/0/abc/לכ/
это имеет не-латинские буквы и

String b = 20141231_042822.jpg 

String c = a + b 

результат:

/storage/emulated/0/abc/לכ/20141231_042822.jpg 

(Пробовал с StringBuilder, а)

+0

Преобразовать эту строку в UTF-8 формат, а затем попытаться добавить его, так что будет работать для и –

+0

Я попробовал последний пример HTTP: // StackOverflow. com/questions/3161712/how-do-i-convert-a-string-to-utf-8-in-android, все еще не работает:/ –

+0

Просто, чтобы было ясно, неанглоязычный язык написан справа -Left, в отличие от английского, который слева направо –

ответ

0

Используйте char[] вместо и добавить их один за другим, используя этот метод:

public char[] generatePath(String a, String b){ 
    if(a==null || b==null) 
     return null; 

    char[] result = new char[a.length() +b.length()]; 

    for(int i=0;i<a.length();i++) 
     result[i]=a.charAt(i); 

    for(int i=a.length();i<a.length()+b.length();i++) 
     result[i]=a.charAt(i); 

    return result; 
} 

Это будет гарантировать, что каждый персонаж находится в правильном месте.

String объекты в Java не имеют кодировки (*).

Единственное, что имеет кодировку, это byte[]. Поэтому, если вам нужны данные UTF-8, вам нужен byte[]. Если у вас есть String, что содержит непредвиденные данные, тогда проблема находится в каком-то более раннем месте , что некорректно преобразует некоторые двоичные данные в String (т. Е. Это было с неправильной кодировкой).

(*) это не совсем точно. На самом деле они имеют кодировку, но это UTF-16 и не могут быть изменены. источник: answer

То, что вы должны сделать, это использовать Byte[] вместо строки

Попробуйте this

Charset.forName("UTF-8").encode(myString); 

или this

byte[] ptext = String.getBytes("UTF-8"); 
+0

Я исправил ваш код, чтобы сделать то, что вы намеревались сделать, результат char [] имеет правильную последовательность символов, но когда я новый String (result) ->, он снова закручивает строку. –

+0

Я не совсем уверен, после вызова generatePath(), как преобразовать char [] в «хорошую» строку? –

+0

use 'new String (generatePath() a, b)' @MikoDiko –

0

Попробуйте использовать BidiFormatter

example Для:

private static String text = "%s הוא עסוק"; 
private static String phone = "+1 650 253 0000"; 

String wrappedPhone = BidiFormatter.getInstance(true /* rtlContext */).unicodeWrap(phone); 
String formattedText = String.format(text, wrappedPhone); 
+0

Еще не повезло с предложением: \ –

Смежные вопросы