alibaba / alibaba/fastjson2

[BUG]使用 fastjson2:2.0.23 版本处理包含法文的字符串出现乱码

Open
#3,594 1 comment 0 reactions 0 assignees View on GitHub
bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.