繁体   English   中英

GluonConnect REST库处理JSON字符串中的非英语字符

[英]GluonConnect REST library mangles non-English characters in a JSON string

我有以下方法可从远程REST API检索JSON字符串。 JSON字符串包含法语字符。 问题是JSON字符串中的法语文本被弄乱了。

我正在使用GluonConnect REST客户端库从远程服务器获取JSON字符串。 除了使用非英语文本检索JSON外,其他一切都很好。

这是我的方法:

public void retrieveJsonString() {
  // GluonConnect RestClient setup
  RestClient restClient = RestClient.create().host(this.host).path(this.path).queryParam("schema", this.schema).queryParam("uri", "/contactsform").method("GET");
  // GluonConnect GluonObservableObject setup
  GluonObservableObject<String> godp = DataProvider.retrieveObject(restClient.createObjectDataReader(String.class));
  // Add a listener to the GluonObservableObject
  godp.stateProperty().addListener(new InvalidationListener() {
    @Override
    public void invalidated(Observable arg0) {
      if (godp.getState().equals(ConnectState.SUCCEEDED)) {
        response.bind(godp.asString());
      }
    }
  });
}

关键是response.bind(godp.asString()) godp.AsString()返回错误的文本。 例如,带有重音符号é的单词“Médiateur”显示为“Médiateur”。 如果我将行更改为response.bind(godp.asString(Locale.FRANCE,null)) ,则不会返回任何内容。

请问我做错了什么? 非常感谢您的协助。

非常感谢您的建议,我终于通过绕过GluonConnect库中的StringInputConverter类使它起作用。 我根据StringInputConverter类编写了一个新的略微修改的类,如下所示:

public class MyCustomStringInputConverter extends InputStreamInputConverter<String> {

private static final Logger LOGGER = Logger.getLogger(StringInputConverter.class.getName());

@Override
public String read() {
  try (StringWriter stringWriter = new StringWriter()) {
    try (
      BufferedReader reader =
          new BufferedReader(new InputStreamReader(getInputStream(), Charset.forName("UTF-8")));
      BufferedWriter writer = new BufferedWriter(stringWriter)) {
    boolean firstWrite = true;
    String line;
    while ((line = reader.readLine()) != null) {
      if (firstWrite) {
        firstWrite = false;
      } else {
        writer.newLine();
      }
      writer.write(line);
    }
  }

  return stringWriter.toString();
  } catch (IOException ex) {
    LOGGER.log(Level.SEVERE, "La lecture du flux d'entrée à échoué.", ex);
    return null;
  }
 }

}

我所做的就是将BufferedReader(new InputStreamReader(getInputStream()))更改为BufferedReader(new InputStreamReader(getInputStream(),Charset.forName(“ UTF-8”)))

然后,将其用于我的retrieveJsonString方法,如下所示:

  public void retrieveJsonString() {

  // RestClient setup
  RestClient restClient =
    RestClient.create().host(this.host).path(this.path).queryParam("schema", this.schema)
        .queryParam("uri", "/contactsform").method("GET");


  MyCustomStringInputConverter converter = new MyCustomStringInputConverter();

  // GluonObservableObject setup
  GluonObservableObject<String> godp =
    DataProvider.retrieveObject(restClient.createObjectDataReader(converter));

  // Add a listener to the GluonObservableObject
  godp.stateProperty().addListener(new InvalidationListener() {
    @Override
    public void invalidated(Observable arg0) {
      if (godp.getState().equals(ConnectState.SUCCEEDED)) {
        response.bind(godp.asString()); 
      } else if (godp.getState().equals(ConnectState.FAILED)) {
        exceptionMsg.set(godp.getException().getMessage());
      }
      }
  });

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM