การเข้ารหัส JAX-RS

ฉันใช้ JAX-RS เพื่อสร้างบริการเว็บ (ส่วนที่เหลือ) ที่ส่งคืนผลลัพธ์ในรูปแบบ JSON

ทุกอย่างเรียบร้อยดี ยกเว้นการเข้ารหัส

ตัวอย่างเช่น ฉันได้รับ:

 ..., parameter:"Dep\u00f3sitos" ,...

แทน:

 ..., parameter:"Depósitos" ,...

ฉันได้ลองใช้:

@Produces("application/json; charset=UTF-8")

แต่ปัญหายังคงอยู่ ถ้าฉันส่งคืนเป็น XML โดยใช้เพียง:

@Produces("application/xml")

ทุกอย่างปกติดี.

ต้องตั้งค่าอะไรบ้างจึงจะได้แบบที่ถูกต้อง?


person RedEagle    schedule 02.03.2011    source แหล่งที่มา
comment
คุณสามารถแก้ไขคำถามเพื่อรวมโค้ดจริงของวิธี JSON ของคุณได้หรือไม่   -  person Jim Ferrans    schedule 04.03.2011


คำตอบ (3)


สิ่งที่คุณต้องการคือ:

String back = "Depósitos";
return new String(back.getBytes(), "UTF8");
person Frank    schedule 14.03.2014
comment
นี่เป็นรหัสที่ไม่มีประโยชน์และเป็นอันตราย String.getBytes() แปลงสตริงเป็นการเข้ารหัสเริ่มต้นของแพลตฟอร์ม สมมติว่าคุณใช้ Windows ดังนั้นอาจเป็น CP1252 จากนั้นคุณสร้างอ็อบเจ็กต์ String ใหม่จากไบต์เหล่านี้ และบอก Java ว่าไบต์นั้นต้องถูกตีความว่าเป็น UTF-8 แม้ว่าไบต์นั้นจะเป็นข้อความ CP1252 ในตัวอย่างนี้ ซึ่งจะทำให้เกิดปัญหาได้ เพิ่มเติม: back เป็นสตริงอยู่แล้ว วัตถุ Java String สามารถเห็นเป็นข้อความโดยไม่ต้องเข้ารหัส (ถูกเข้ารหัสด้วย UTF-16 ภายใน แต่ไม่สำคัญ) การเข้ารหัสจะมีความสำคัญเฉพาะเมื่อสตริงถูกแปลงเป็นไบต์เท่านั้น - person Sky; 06.03.2018

ฉันลงเอยด้วยการใช้ GSON แทน JSON4J ของ IBM ซึ่งพิสูจน์แล้วว่าดีกว่ามากในการจัดการซีเรียลไลซ์คลาส Java แบบกำหนดเอง

person RedEagle    schedule 09.03.2011

ดูคำตอบของ Bryant Luk สำหรับคำถาม "จะตั้งค่าชุดอักขระด้วย JAX-RS ได้อย่างไร" และดูว่าได้ผลหรือไม่

person bamana    schedule 02.03.2011