Android 如何将Shift JIS编码字符串转换为UTF-8?
我从中获取html源代码。Html文件是Shift JIS编码的。我正在努力获得书名和作者。然后我想将标题和作者记录到SQLite(UTF-8)数据库中Android 如何将Shift JIS编码字符串转换为UTF-8?,android,encoding,utf-8,sqlite,shift-jis,Android,Encoding,Utf 8,Sqlite,Shift Jis,我从中获取html源代码。Html文件是Shift JIS编码的。我正在努力获得书名和作者。然后我想将标题和作者记录到SQLite(UTF-8)数据库中 String[] splittedResult = result.split("\"title\">"); splittedResult = splittedResult[1].split("</h1>"); String title = splittedResult[0
String[] splittedResult = result.split("\"title\">");
splittedResult = splittedResult[1].split("</h1>");
String title = splittedResult[0];
byte[] b = null;
try {
b = title.getBytes("Shift_JIS");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String value=null;
try {
value = new String(b, "UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
...
myDatabase.addBookInformation(value, author);
String[]splittedResult=result.split(“\”title\“>”);
splittedResult=splittedResult[1]。拆分(“”);
字符串标题=拆分结果[0];
字节[]b=null;
试一试{
b=title.getBytes(“Shift_JIS”);
}捕获(不支持DencodingException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
字符串值=null;
试一试{
值=新字符串(b,“UTF-8”);
}捕获(不支持DencodingException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
...
myDatabase.addBookInformation(值、作者);
结果是这样的:拉丁字母显示正常。但是日语字母在里面用问号块表示(请不要注意空值)
如何解决这个问题?正如@Codo所指出的,这个问题的解决方案是以前的。 我改变了这个
s = EntityUtils.toString(response.getEntity(), "UTF-8");
对此
s = EntityUtils.toString(response.getEntity(), "Shift_JIS");
现在不需要编码了
String[] splittedResult = result.split("\"title\">");
splittedResult = splittedResult[1].split("</h1>");
String title = splittedResult[0];
/** I HAVE TAKEN THIS PART OF MY CODE
byte[] b = null;
try {
b = title.getBytes("Shift_JIS");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String value=null;
try {
value = new String(b, "UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
**/
String[]splittedResult=result.split(“\”title\“>”);
splittedResult=splittedResult[1]。拆分(“”);
字符串标题=拆分结果[0];
/**我已经把这部分代码
字节[]b=null;
试一试{
b=title.getBytes(“Shift_JIS”);
}捕获(不支持DencodingException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
字符串值=null;
试一试{
值=新字符串(b,“UTF-8”);
}捕获(不支持DencodingException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
**/
Java字节数组可以包含具有特定编码的字符串。Java字符串不能:它基本上是一个不涉及任何编码的字符数组。代码以字符串变量(名为result
)开头。因此,从带有特定编码的HTML页面到不带编码的字符数组的转换已经发生。使用调试器检查结果
或标题
是否包含正确的日文字符。如果不是,则问题出现在问题中显示的代码之前。如果可以的话,我不明白你的问题。