2016-04-18 5 views
1

Когда я непосредственно скопировать содержимое моего HTML-файла и сохранить его в строку, а затем показать его в WebView с помощью:Нежелательный символ в WebView

mWebView.loadDataWithBaseURL("file:///android_asset/", myString, "text/html", "UTF-8", null); 

все в порядке! Я хочу изменить содержимое моего HTML файла (программно) перед загрузкой в ​​WebView, но когда я прочитал HTML-файл из папки активов, используя ниже код

private String loadAssetTextAsString(Context context, String name) { 
    BufferedReader in = null; 
    try { 
     StringBuilder buf = new StringBuilder(); 
     InputStream is = context.getAssets().open(name); 
     in = new BufferedReader(new InputStreamReader(is, "UTF-8")); 

     String str; 
     boolean isFirst = true; 
     while ((str = in.readLine()) != null) { 
      if (isFirst) 
       isFirst = false; 
      else 
       //buf.append('\n'); 
       buf.append(str); 
     } 
     return buf.toString(); 
    } catch (IOException e) { 
     Log.e("TAG", "Error opening asset " + name); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       Log.e("TAG", "Error closing asset " + name); 
      } 
     } 
    } 

    return null; 
} 

, а затем загрузить его в WebView, то WebView неожиданно показывает характер (Я думаю, его название - мягкий дефис). Я использовал UTF-8 как charset в своем html-файле. Кроме того, я использовал ниже код для удаления , который не удался.

myString = myString.replace("�", ""); 

Как удалить ? спасибо за любую помощь.

� character

+0

Вы можете напрямую открыть HTML-файл в WebView. Зачем вам читать его в String? –

+0

Возможный дубликат [Загрузка существующего .html-файла с помощью веб-обозревателя android WebView] (http://stackoverflow.com/questions/4027701/loading-existing-html-file-with-android-webview) –

+2

Это похоже на кодировку UTF-16BE , необходимый для InputStreamReader. –

ответ

1

Ваше содержание выглядит он кодируется как UTF-16, где каждый символ использует два байта вместо одного +, как в UTF-8. Простые символы ASCII имеют префикс нулевого байта \0 в UTF-16, который при его отображении преобразуется в .

Таким образом, чтение как UTF-16 из InputStream может решить эту проблему:

in = new BufferedReader(new InputStreamReader(is, "UTF-16")); 

String.replace("�", "") не работает, потому что символ, как вы видите, что это не то же самое, как он закодирован в Струна. Возможно, прямая замена нулевого байта \0 может работать, если она сохраняется во время декодирования как UTF-8: String.replace("\0", "").

+0

Спасибо @Floern. Ваш ответ был очень полезен для меня. –

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