2016-04-18 5 views
1

Wenn ich direkt den Inhalt meiner HTML-Datei und speichern sie in einer Zeichenfolge zu kopieren, zeigen Sie sie dann in Webansicht mit:Nebencharakter in webview

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

alles in Ordnung ist! Ich will Inhalt meiner html-Datei ändern (programmatisch), bevor zur Webansicht Laden, aber wenn ich die HTML-Datei aus dem Asset-Ordner lesen Sie unten Code

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; 
} 

und dann in webview laden, die Webansicht unerwartet zeigt Charakter (Ich denke, sein Name ist weicher Bindestrich). Ich habe UTF-8 als Zeichensatz in meiner HTML-Datei verwendet. Auch habe ich unten Code zum Entfernen von verwendet, die fehlgeschlagen ist.

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

Wie kann ich entfernen? Danke für jede Hilfe.

� character

+0

Sie können eine HTML-Datei direkt in einem WebView öffnen. Warum musst du es in einen String lesen? –

+0

Mögliches Duplikat von [Bestehende .html Datei mit Android WebView laden] (http://stackoverflow.com/questions/4027701/loading-existing-html-file-with-android-webview) –

+2

Das scheint UTF-16BE Kodierung zu sein , benötigt für den InputStreamReader. –

Antwort

1

Ihr Inhalt sieht aus wie es als UTF-16 codiert ist, wobei jedes Zeichen zwei Bytes verwendet anstelle einer + als in UTF-8. Einfache ASCII-Zeichen haben in UTF-16 ein Nullbyte \0 als Präfix, das beim Versuch, es anzuzeigen, in ein converted konvertiert wird.

So ist es als UTF-16 liest aus dem InputStream könnte das Problem lösen:

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

Die String.replace("�", "") funktioniert nicht, weil das Symbol, wie Sie es sehen nicht das gleiche ist, wie es in codiert ist die Saite. Vielleicht könnte das Nullbyte \0 direkt ersetzen, wenn es während der Decodierung als UTF-8: String.replace("\0", "") beibehalten wird.

+0

Danke @Floern. Ihre Antwort war sehr hilfreich für mich. –