Face API添加中文姓名问题咨询:Android端显示问号,Web端正常
解决Face API Android端中文姓名显示问号的问题
我之前也碰到过类似的问题,核心原因基本都是Android请求的字符编码没明确配置UTF-8——Web端默认会用UTF-8处理中文,但Android如果不特意指定,就容易出现中文转成问号的乱码情况。下面是几个针对性的排查和解决步骤:
1. 给请求头明确指定UTF-8编码
不管你是用原生HttpURLConnection还是Retrofit、OkHttp这类框架,一定要在请求头里把Content-Type的charset设为UTF-8:
- 原生HttpURLConnection示例:
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");
- Retrofit示例(配合Gson):
Gson gson = new GsonBuilder() .setCharset(Charset.forName("UTF-8")) .create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(YOUR_BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
2. 检查中文姓名的字符串传输方式
不要手动对中文字符串做URLEncoder转码(除非API文档明确要求),直接传递原始字符串即可。但要确保将字符串转为字节流时用UTF-8编码:
String requestBody = "{\"name\":\"张三\"}"; byte[] postData = requestBody.getBytes(StandardCharsets.UTF_8); // 将postData写入请求输出流
3. 排查序列化后的请求体是否正常
如果用实体类序列化生成请求JSON(比如Gson、Jackson),先在本地打印序列化后的字符串,确认中文是否正常:
PersonEntity person = new PersonEntity(); person.setName("张三"); String jsonStr = new Gson().toJson(person); Log.d("FaceAPIDebug", "序列化后的JSON: " + jsonStr);
如果打印出来的JSON里中文是正常的,那问题出在请求发送环节的编码配置;如果打印出来就是问号,那是本地字符串的编码问题(比如读取资源文件时用了错误编码)。
4. 确认服务器端的编码兼容性
虽然Web端能正常工作,但可以简单确认下服务器是否接受UTF-8编码的请求。不过Web端没问题的话,服务器大概率是支持的,所以重点还是放在Android的请求配置上。
内容的提问来源于stack exchange,提问作者shen
相关产品推荐
相关产品推荐

