[BUG]使用 fastjson2:2.0.23 版本处理包含法文的字符串出现乱码
- Dominant language
- Java
- Stars
- 4.4k
- Forks
- 613
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 6
Description
### 问题描述
在项目中使用 fastjson2:2.0.23 版本处理包含法文的字符串出现乱码
### 环境信息
*请填写以下信息:*
- OS信息: MacOS M2 pro 16G [e.g.:CentOS 8.4.2105 4Core 3.10GHz 16 GB]
- JDK信息: Azul Zulu 11.0.27
- 版本信息:[[e.g.:Fastjson2 2.x.x]](fastjson2:2.0.23)
### 重现步骤
*如何操作可以重现该问题:*
执行以下 main 方法可以复现:
public static void main(String[] args) throws Exception {
String paramStr = "{\"serviceType\":\"1\",\"proCode\":\"LS0202000016\",\"babySeatNum\":0,\"memberShipCode\":\"7800373006367125\",\"channel\":\"4\",\"language\":\"fr-ca\",\"tenantCode\":\"0202\",\"couponMemberCode\":\"227UBHQ06C\",\"startAddressList\":[{\"addressName\":\"Aéroport international de Dubaï\",\"stationCode\":\"A10001\"}],\"feature\":\"{\\\"limoPreBookOrderFeature\\\":{\\\"adultsNum\\\":1,\\\"businessTime\\\":\\\"1 heure\\\",\\\"childNum\\\":0,\\\"costPrice\\\":94.85,\\\"couponMemberCodes\\\":[\\\"227UBHQ06C\\\"],\\\"dropOffLocation\\\":\\\"Dubai Mall - Dubaï - Émirats arabes unis\\\",\\\"maxLuggage\\\":4,\\\"maxPassenger\\\":6,\\\"originalLang\\\":\\\"fr-CA\\\",\\\"pickUpLocation\\\":\\\"Aéroport international de Dubaï(DXB)\\\",\\\"supplierPhone\\\":\\\"+44 8081966002\\\"}}\",\"smallLuggageNum\":0,\"endAddressList\":[{\"addressName\":\"Downtown Dubai - Dubai - United Arab Emirates Downtown Dubai\",\"latitude\":\"25.1949849\",\"longitude\":\"55.2784141\"}],\"passengerList\":[{\"email\":\"testhyc985747@test.com\",\"mainPassenger\":true,\"name\":\"test test\",\"phoneNum\":\"13710732326\",\"phonePrefix\":\"86\",\"sendSms\":false,\"firstName\":\"test\",\"lastName\":\"test\"}],\"carLevelCode\":\"business\",\"childSeatNum\":1,\"flightDate\":\"2025-06-28\",\"raiseSign\":false,\"bigLuggageNum\":0,\"timeZone\":\"UTC+04:00\",\"passengerNum\":1,\"luggageNum\":0,\"serviceTime\":\"2025-06-28T04:15:00.000+04:00\",\"flightNo\":\"EK353\",\"passengerRemark\":\"fasdfdas\"}";
System.out.println("转换前");
System.out.println(paramStr);
JSONObject jsonObject = JSON.parseObject(paramStr);
System.out.println("转换后");
System.out.println(JSON.toJSONString(jsonObject));
}
### 期待的正确结果
转换后可以正确的解析法文
### 相关日志输出
输出日志:转换前
{"serviceType":"1","proCode":"LS0202000016","babySeatNum":0,"memberShipCode":"7800373006367125","channel":"4","language":"fr-ca","tenantCode":"0202","couponMemberCode":"227UBHQ06C","startAddressList":[{"addressName":"Aéroport international de Dubaï","stationCode":"A10001"}],"feature":"{\"limoPreBookOrderFeature\":{\"adultsNum\":1,\"businessTime\":\"1 heure\",\"childNum\":0,\"costPrice\":94.85,\"couponMemberCodes\":[\"227UBHQ06C\"],\"dropOffLocation\":\"Dubai Mall - Dubaï - Émirats arabes unis\",\"maxLuggage\":4,\"maxPassenger\":6,\"originalLang\":\"fr-CA\",\"pickUpLocation\":\"Aéroport international de Dubaï(DXB)\",\"supplierPhone\":\"+44 8081966002\"}}","smallLuggageNum":0,"endAddressList":[{"addressName":"Downtown Dubai - Dubai - United Arab Emirates Downtown Dubai","latitude":"25.1949849","longitude":"55.2784141"}],"passengerList":[{"email":"testhyc985747@test.com","mainPassenger":true,"name":"test test","phoneNum":"13710732326","phonePrefix":"86","sendSms":false,"firstName":"test","lastName":"test"}],"carLevelCode":"business","childSeatNum":1,"flightDate":"2025-06-28","raiseSign":false,"bigLuggageNum":0,"timeZone":"UTC+04:00","passengerNum":1,"luggageNum":0,"serviceTime":"2025-06-28T04:15:00.000+04:00","flightNo":"EK353","passengerRemark":"fasdfdas"}
转换后
{"serviceType":"1","proCode":"LS0202000016","flightDate":"2025-06-28","raiseSign":false,"babySeatNum":0,"memberShipCode":"7800373006367125","channel":"4","bigLuggageNum":0,"timeZone":"UTC+04:00","language":"fr-ca","tenantCode":"0202","passengerNum":1,"couponMemberCode":"227UBHQ06C","luggageNum":0,"serviceTime":"2025-06-28T04:15:00.000+04:00","startAddressList":[{"stationCode":"A10001","addressName":"Aéroport international de Dubaï"}],"flightNo":"EK353","feature":"{\"limoPreBookOrderFeature\":{\"adultsNum\":1,\"businessTime\":\"1 heure\",\"childNum\":0,\"costPrice\":94.85,\"couponMemberCodes\":[\"227UBHQ06C\"],\"dropOffLocation\":\"Dubai Mall - Duba - mirats arabes unis\",\"maxLuggage\":4,\"maxPassenger\":6,\"originalLang\":\"fr-CA\",\"pickUpLocation\":\"A←roport international de Duba(DXB)\",\"supplierPhone\":\"+44 8081966002\"}}","smallLuggageNum":0,"passengerRemark":"fasdfdas","endAddressList":[{"latitude":"25.1949849","addressName":"Downtown Dubai - Dubai - United Arab Emirates Downtown Dubai","longitude":"55.2784141"}],"passengerList":[{"phonePrefix":"86","firstName":"test","lastName":"test","sendSms":false,"mainPassenger":true,"name":"test test","phoneNum":"13710732326","email":"testhyc985747@test.com"}],"carLevelCode":"business","childSeatNum":1}
#### 附加信息
Contributor guide
Research direction
Start by running the supplied main method with fastjson2:2.0.23 and compare the output before and after JSON.parseObject and JSON.toJSONString. Trace the handling of the nested feature string and its French characters; done means accents such as Dubaï, Émirats, and Aéroport remain unchanged after conversion.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100