从Google翻译器API阅读并写入属性文件

时间:2016-06-03 04:29:18

标签: java utf-8 resourcebundle

我正在使用Google翻译API从英文属性文件生成阿拉伯语属性文件。

  1. 建立URL连接并向URL发出GET请求。传递原始语言,翻译语言和要翻译的值

    URLConnection urlCon = null;
    String urlStr =“https://www.googleapis.com/language/translate/v2”; 网址url =新网址(urlStr +“?key =”+ apikey +“& source =”+ origlang +“& target =”+ translateToLang +“& q =”+ value);
    urlCon = url.openConnection(); urlCon.setConnectTimeout(1000 * 60 * 5);
    urlCon.setReadTimeout(1000 * 60 * 5);
    urlCon.setDoInput(真);
    urlCon.setDoOutput(真);
    urlCon.setUseCaches(假);
    ((HttpURLConnection)urlCon)。setRequestMethod(“GET”);
    urlCon.setRequestProperty(“Accept-Charset”,“UTF-8”);

  2. 通过输入流阅读器从URL连接中读取响应。在编码参数中传递UTF-8。

    BufferedReader br = new BufferedReader(new InputStreamReader(((URLConnection)urlCon).getInputStream(),“UTF-8”));
                / *逐行读取响应* /
    StringBuffer responseString = new StringBuffer();
    String nextLine = null;
    while((nextLine = br.readLine())!= null){
    responseString.append(nextLine);
    }
    //如果响应为null或为空,则抛出异常
    字符串响应= responseString.toString();

  3. 解析通过GSON解析器收到的JSON JsonElement jelement = new JsonParser()。parse(response);
    JsonObject jobject = jelement.getAsJsonObject();
    jobject = jobject.getAsJsonObject(“data”);
    JsonArray jarray = jobject.getAsJsonArray(“translations”);
    jobject = jarray.get(0).getAsJsonObject();
    String result = jobject.get(“translatedText”)。toString();

  4. 通过fileoutstream将翻译后的值写入新的属性文件

    FileOutputStream foutStream = new FileOutputStream(outFile); foutStream.write(key.getBytes()); foutStream.write( “=” 的getBytes()); foutStream.write(transByte.getBytes()); foutStream.write(“\ n”.getBytes());

  5. 问题是我在阿拉伯语的新属性文件中写了乱码文本(?????)。 请说明可能的原因。

1 个答案:

答案 0 :(得分:0)

当您致电transByte.getBytes()时,阿拉伯语翻译采用您的平台默认编码进行编码,如果您的机器配置为UTF-8或阿拉伯语,则只会处理阿拉伯语。否则,字符将被'�''?'替换。

创建一个新的Properties实例,并使用setProperty()调用填充它。然后,当您store it,时,正确的转义将应用于您的阿拉伯语文本,这是必要的,因为属性文件使用ISO-8859-1(西方拉丁字符的编码)进行编码。

或者,您可以使用您选择的任何编码配置store the Properties using a Writer实例,但编码不会存储在文件本身中,因此您需要元数据或约定来设置正确的再次读取文件时的编码。

最后,您可以store the Properties in an XML format,默认使用UTF-8,或者您可以指定其他编码。文件本身将指定编码,因此更容易为每种语言使用最佳编码。

尝试使用自定义字符串连接发出文件格式,正如您所做的那样,是经常重复的灾难处理方法。无论是XML,JSON还是简单的属性文件,都很容易忽略需要转义序列等的特殊情况。使用设计用于发出格式的库。