在app引擎数据存储中为Text数据类型设置编码

时间:2015-04-11 22:23:35

标签: java google-app-engine google-cloud-platform google-cloud-datastore google-cloud-endpoints

在我的带有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();

2 个答案:

答案 0 :(得分:1)

答案 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();