小程序端請求參數(shù)中含有中文
如果小程序端發(fā)起的請求參數(shù)中含有中文,直接發(fā)送到后臺會顯示亂碼,需要在header中設(shè)置UTF-8編碼
wx.request({
url: app.globalData.server_url + "wxTest",
method: 'post',
header: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
},
data: {
srctPhone: srctPhone
},
這樣后臺接收到的中文就能解析正常了
后臺返給小程序的數(shù)據(jù)中含有中文
為了便于測試,后臺接口簡化如下:
/**
* 微信解析手機號
* @param srctPhone
* @return
*/
@PostMapping(value = "/wxTest")
public Map wxTest(String srctPhone) {
Map map = new HashMap();
map.put("code", 200);
JSONObject obj = new JSONObject();
obj.put("phoneNumber", "13512911111"); // 手機號明文
obj.put("userName", "張三"); // 測試中文
map.put("data", obj);
return map;
}
結(jié)果小程序端顯示的用戶名為“寮犱笁”。
起初懷疑后臺返回的編碼格式不對,網(wǎng)上說對于Springboot的@RestController注解,可以使用produces強制進(jìn)行修改返回數(shù)據(jù)的格式,修改如下:
@PostMapping(value = "/wxTest", produces = "application/json;charset=utf-8")
public Map wxTest(String srctPhone) {
Map map = new HashMap();
map.put("code", 200);
JSONObject obj = new JSONObject();
obj.put("phoneNumber", "13512911111"); // 手機號明文
obj.put("userName", "張三"); // 測試中文
map.put("data", obj);
return map;
}
結(jié)果還是不行,另有說需要在WebMvcConfiguration類中進(jìn)行統(tǒng)一配置:
@Component
public class WebMvcConfiguration implements WebMvcConfigurer {
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
return new StringHttpMessageConverter(Charset.forName("UTF-8"));
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(responseBodyConverter());
}
然而并無卵用,到底是怎么回事呢,在小程序端打印一下響應(yīng)格式看看:
可以看到小程序端已經(jīng)是application/json;charset=utf-8類型了,居然姓名還是亂碼,真是讓人抓狂?。。。?br> 今天突發(fā)奇想,是不是后臺傳輸?shù)臄?shù)據(jù)格式本身就不對啊,打印一下看看:文章來源:http://www.zghlxwxcb.cn/news/detail-488774.html
JSONObject obj = new JSONObject();
obj.put("phoneNumber", "13512911111"); // 手機號明文
obj.put("userName", "張三"); // 測試中文
System.out.println("userName: 張三");
map.put("data", obj);
return map;
打印結(jié)果:
代碼里直接寫的“張三”,打印出來居然是:寮犱笁。難度是文件編碼不對?
可是IDEA顯示的是UTF-8啊,難到是工程設(shè)置的問題:
工程設(shè)置也是UTF-8,但是上面有個Participant.java文件設(shè)置的是GBK,一個工程里面編碼不統(tǒng)一,難道是這個原因引起的?趕緊把上面的GBK設(shè)置刪除,重新編譯運行還是不行啊,重啟IDEA試試:
終于看到久違的“張三”了!明明設(shè)置工程為UTF-8,可居然因為一個文件設(shè)置不同導(dǎo)致整個工程以GBK格式編譯的,這像是IDEA本身的bug,我用的是IDEA2018.3.5,可,能是老版本的原因了,不知新版本有沒這個問題,先記錄下來。文章來源地址http://www.zghlxwxcb.cn/news/detail-488774.html
到了這里,關(guān)于關(guān)于微信小程序與Java后臺交互數(shù)據(jù)中中文亂碼問題的討論的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!