1.基於如何在Android中正確保存和解析XML UTF-8(Ü,Ä,Ö)?
我的代碼是基於本教程在這裏: https://www.youtube.com/watch?v=40mYDQkK44A https://github.com/FoamyGuy/StackSites
所以,如果你想了解發生了什麼,只是看看整個代碼在那裏,我的天堂它沒有改變很多。
2. MY XML
<event>
<name>Reunion</name>
<date>Freitag 07.07.2017 </date>
<link>EVENT LINK</link>
<about>Über eine Woche ist es her, seit .... ÄÜÖ :-) </about>
<image>IMAGE LINK</image>
</event>
3. XML
URLConnection ucon = url.openConnection();
/************************************************
* Define InputStreams to read from the URLConnection.
************************************************/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/************************************************
* Define OutputStreams to write to our file.
************************************************/
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte data[] = new byte[1024];
//long total = 0;
int count;
//loop and read the current chunk
while ((count = bis.read(data)) != -1) {
//keep track of size for progress.
//total += count;
//write this chunk
bos.write(data, 0, count);
}
//Have to call flush or the file can get corrupted.
bos.flush();
bos.close();
4的下載讀取XML
// Get our factory and PullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
// Open up InputStream and Reader of our file.
FileInputStream fis = ctx.openFileInput("Events.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"UTF-8"));
// point the parser to our file.
xpp.setInput(reader);
// get initial eventType
int eventType = xpp.getEventType();
// Loop through pull events until we reach END_DOCUMENT
while (eventType != XmlPullParser.END_DOCUMENT) {
// Get the current tag
String tagname = xpp.getName();
// React to different event types appropriately
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase(KEY_SITE)) {
// If we are starting a new <site> block we need
//a new StackSite object to represent it
curStackSite = new StackSite();
}
break;
case XmlPullParser.TEXT:
//grab the current text so we can use it in END_TAG event
curText = xpp.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase(KEY_EVENT)) {
// if </event> then we are done with current Event
// add it to the list.
stackSites.add(curStackSite);
} else if (tagname.equalsIgnoreCase(KEY_NAME)) {
// if </name> use setName() on curSite
curStackSite.setName(curText);
} else if (tagname.equalsIgnoreCase(KEY_LINK)) {
// if </link> use setLink() on curSite
curStackSite.setLink(curText);
} else if (tagname.equalsIgnoreCase(KEY_ABOUT)) {
// if </about> use setAbout() on curSite
curStackSite.setAbout(curText);
} else if (tagname.equalsIgnoreCase(KEY_IMAGE_URL)) {
// if </image> use setImgUrl() on curSite
curStackSite.setImgUrl(curText);
} else if (tagname.equalsIgnoreCase(KEY_DATE)) {
// if </date> use setDate() on curSite
curStackSite.setDate(curText);
}
break;
5.我的問題
基本上,這段代碼中的所有內容都像它應該那樣工作,除了在TextView中顯示像「Ö,Ä,Ü」這樣的字符。 TextView總是給我一個「?」而不是「Ü,Ä,..」。所以我試圖用谷歌給我提供的每一種方式解決這個問題,但我無法解決這個問題。我試着改變緩衝區「byte data [] = new byte [1024];」到更大的東西,而不是BufferedInputStream我試着InputStreamReader ecc。
我觀察到的結果是:用記事本在「ANSI」中保存我的XML代碼確實工作正常,用「UTF-8」保存它根本不起作用,我沒有從我的讀者那裏得到任何東西。
我也想展示一些表情符號,但這是問題的第二部分。顯示「Ü,Ä,Ö」首先會更重要。
顯示/佈局
這裏是顯示頁面的我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:padding="10dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/schalt2"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/iconImg"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/event_title"
android:textColor="@android:color/white"
android:padding="4dp"
android:textStyle="bold"
android:textSize="22sp"
android:layout_below="@id/iconImg"
/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/event_date"
android:textStyle="bold"
android:textSize="14sp"
android:padding="5dp"
android:textColor="@android:color/white"
android:layout_below="@id/event_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/eventdescriptlong"
android:layout_below="@id/event_title"
android:padding="28dp"
android:textColor="@android:color/white"
/>
所以,如果我想使用這樣一個TextView:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/eventdescriptlong"
android:layout_below="@id/event_title"
android:text="ÜÖÄ"
android:textColor="@android:color/white"
/>
它得到的正確顯示。
怎麼樣的顯示組件的代碼頁? –
感謝您的時間 - 顯示需要的地方在這兩個文件:https://github.com/FoamyGuy/StackSites/blob/master/src/com/makemyandroidapp/example/stacksites/StackSite.java和https:// github.com/FoamyGuy/StackSites/blob/master/src/com/makemyandroidapp/example/stacksites/SitesAdapter.java –
我是指你的佈局XML,尤其是在'TextView's使用的字體... –