2012-04-19 5 views
4

У меня проблема с обрезанием пробелов в китайских иероглифах. Я пытался войти содержание и вот как это выглядит:Android: Как удалить пробелы в китайских иероглифах?

Result

При отображении его в TextView, это действительно показывает китайские иероглифы, но проблема в том, пробелы до и после строки текста. Может ли кто-нибудь помочь мне кодировать/декодировать это? заранее спасибо.

EDIT 1: Добавлен снимок экрана.

EDIT 2: Добавлена ​​кодировка содержимого в ответ.

HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); 

, но я все еще получаю квадратные символы при входе и при отображении в макете XML, квадратные символы становятся пробелы.

EDIT 3: Добавлено мое рабочее решение.

private String removeWhiteSpace(String oldString) { 
    String newString = null; 
    if (oldString.length() > 0) { 
     Character c = oldString.charAt(0); 

     boolean isWhiteSpace = Character.isWhitespace(c);       
     if (isWhiteSpace) { 
      newString = oldString.replace(c, ' '); 
     } else { 
      newString = oldString; 
     } 

     newString = newString.trim(); 
    } 
    return newString; 
} 

ответ

1

Китайский и японский языки не используют символ обычного пробела ''. Языки используют свои собственные, которые имеют ту же ширину, что и символы. Это символ здесь », вы должны написать ручную функцию обрезки, чтобы проверить этот символ в начале и конце строки.

Возможно, вы сможете напрямую использовать символ, если вы конвертируете свой файл кода в unicode (если Java разрешит). В противном случае вам нужно будет найти код символа Юникода для '' и проверить, находится ли код символа в начале или конце строки.

Следующая ссылка сообщает нам, что идеографическое пространство 0xe38080 в UTF-8 и 0x3000 в UTF-16, и что функция Character.isSpaceChar() Java вернет true. Я бы подумал, что String.trim() использовал бы это свойство, чтобы определить, нужно ли обрезать.

http://www.fileformat.info/info/unicode/char/3000/index.htm

1

Вы можете использовать Googles Guava библиотеку для этого;

CharMatcher.inRange('\0', ' ').trimFrom(str); 

вы можете обратиться больше об этом здесь:

How to properly trim whitespaces from a string in Java?

+0

Проблема в том, как я узнаю пробельные символы китайского языка? – exception01

0

Для обрезки пробельных в Юникоде, который, имеющие 2 байта использование строки замены.

заменить 2-байтовое пространство на 1 байт. 0x3000 - это шестнадцатеричное значение unicode. IDEOGRAPHIC SPACE

String.replace("\u3000"," ").trim()