在我的带有app引擎后端的android项目中,我使用Text数据类型来存储我的一个实体属性。由于与String数据类型不同,Text数据类型不支持Unicode,因此我的编码会丢失,并且会从数据存储中检索该属性的数据。因此,我只能看到ascii字符,而其他所有字符都没有正确显示。如何为Text数据类型设置Unicode编码?任何帮助表示赞赏。
请参阅下面的代码,我将填充文本数据类型(quizcontent)并将其存储在app引擎数据存储中。我从本地存储的文件中获取内容,填充到字符串中,然后将该字符串加载到app引擎数据存储中的quizcontent属性(数据类型为Text)中。当我从app引擎控制台在数据存储中查看此属性时,我可以看到Unicode编码丢失。
public class EndpointsInsertUpdateQuizContentTask extends AsyncTask<Context, Integer, Long>{
protected Long doInBackground(Context... contexts){
Quizcontenttableendpoint.Builder endpointBuilder = new Quizcontenttableendpoint.Builder(
AndroidHttp.newCompatibleTransport(), new JacksonFactory(), new HttpRequestInitializer() {
public void initialize(HttpRequest httpRequest) { } });
Quizcontenttableendpoint endpoint = CloudEndpointUtils.updateBuilder(endpointBuilder).build();
try{
//get local file content into a string
int ch;
StringBuffer fileContent = new StringBuffer("");
FileInputStream fis;
//String quizContentString;
fis = getBaseContext().openFileInput(selectedQuiz);
while( (ch = fis.read()) != -1)
fileContent.append((char)ch);
String quizContentString = new String(fileContent);
QuizContentTable quizContentTable = new QuizContentTable();
quizContentTable.setQuizKey(quizKey);
quizContentTable.setQuizContent(quizContentString);
quizContentResult = endpoint.insertQuizContentTable(quizContentTable).execute();
}
catch(Exception e){
errMsg=e.toString();}
return (long) 0;
}
private ProgressDialog pdia;
@Override
protected void onPreExecute(){
super.onPreExecute();
pdia = new ProgressDialog(ctx);
pdia.setMessage("Loading");
pdia.show();
}
protected void onPostExecute(Long result1) {
pdia.dismiss();
答案 0 :(得分:1)
您可以使用文本参数[1]
设置编码属性[1] https://cloud.google.com/appengine/docs/python/datastore/typesandpropertyclasses#Text
答案 1 :(得分:0)
解决了这些问题。问题是我在将文件内容读入字符串时错过了UTF编码。使用以下代码替换上面代码中的文件阅读部分
String str; StringBuffer fileContent = new StringBuffer(""); BufferedReader in = new BufferedReader(new InputStreamReader(getBaseContext().openFileInput(selectedQuiz), "UTF-8")); while ((str = in.readLine()) != null) fileContent.append(str); String quizContentString = new String(fileContent); in.close();