ฉันได้รับคำเตือนต่อไปนี้เมื่อใช้java.net.URLEncoder.encode
:
คำเตือน: [deprecation] encode (java.lang.String) ใน java.net.URLEncoder เลิกใช้แล้ว
ฉันควรใช้อะไรแทน
ฉันได้รับคำเตือนต่อไปนี้เมื่อใช้java.net.URLEncoder.encode
:
คำเตือน: [deprecation] encode (java.lang.String) ใน java.net.URLEncoder เลิกใช้แล้ว
ฉันควรใช้อะไรแทน
คำตอบ:
ใช้encode
วิธีอื่นในURLEncoder :
URLEncoder.encode(String, String)
พารามิเตอร์แรกคือข้อความที่จะเข้ารหัส; ที่สองคือชื่อของการเข้ารหัสอักขระที่จะใช้ (เช่น, UTF-8
) ตัวอย่างเช่น:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
และStandardCharsets.UTF_8
อื่น ๆ แต่น่าเสียดายที่URLEncoder.encode
ไม่ยอมรับCharset
... (แต่มีวิธีอื่น ๆ อีกมากมาย)
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
การใช้งาน โดยใช้ค่าคงที่คงที่UTF_8
ของtoString()
วิธีการเป็นรูปแบบการเข้ารหัสอักขระพ่นjava.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
เป็นtoString()
ผลตอบแทน 'java.nio.charset.CharsetICU [UTF-8]' ในการรับ "UTF-8" ที่ต้องการให้ใช้name()
วิธีการแทน
คุณควรใช้:
URLEncoder.encode("NAME", "UTF-8");
ใช้คลาสURLEncoder :
URLEncoder.encode(String s, String enc)
ที่ไหน:
s - สตริงที่จะแปล
ชุดอักขระมาตรฐาน:
US-ASCII ASCII เจ็ดบิตหรือ ISO646-US หรือบล็อกละตินพื้นฐานของชุดอักขระ Unicode ISO-8859-1 ISO อักษรละตินหมายเลข 1 หรือ ISO-LATIN-1
UTF-8รูปแบบการแปลง UCS แปดบิต
UTF-16BE รูปแบบการแปลง UCS สิบหกบิต, คำสั่งไบต์ขนาดใหญ่
UTF-16LE รูปแบบการแปลง UCS สิบหกบิต, ลำดับไบต์แบบ end-endian
UTF-16รูปแบบการแปลง UCS แบบสิบหกบิตลำดับไบต์ที่ระบุโดยเครื่องหมายทางเลือกแบบไบต์
ตัวอย่าง:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
พารามิเตอร์แรกคือสตริงที่จะเข้ารหัส; ที่สองคือชื่อของการเข้ารหัสอักขระที่จะใช้ (เช่น UTF-8)
เป็นการอ้างอิงเพิ่มเติมสำหรับคำตอบอื่น ๆ แทนที่จะใช้"UTF-8"คุณสามารถใช้:
HTTP.UTF_8
ซึ่งถูกรวมตั้งแต่ Java 4 เป็นส่วนหนึ่งของไลบรารี org.apache.http.protocol ซึ่งรวมอยู่ด้วยตั้งแต่ Android API 1
org.apache.http.protocol.HTTP
ชั้น
การใช้งานของorg.apache.commons.httpclient.URI
ไม่ได้เป็นปัญหาอย่างเคร่งครัด; สิ่งที่เป็นปัญหาคือการที่คุณกำหนดเป้าหมายตัวสร้างที่ไม่ถูกต้องซึ่งจะคิดค่าเสื่อมราคา
ใช้เพียง
new URI( [string] );
จะตั้งค่าสถานะเป็นค่าเสื่อมราคาแน่นอน สิ่งที่จำเป็นคือการจัดเตรียมอาร์กิวเมนต์เพิ่มเติมอย่างน้อยหนึ่งอาร์กิวเมนต์ (ตัวแรก, ด้านล่าง), และข้อสอง:
escaped
: จริงถ้าลำดับอักขระ URI อยู่ในรูปแบบ Escape เท็จอย่างอื่นcharset
: สตริงชุดอักขระที่จะหลีกเลี่ยงการเข้ารหัสหากจำเป็นสิ่งนี้จะกำหนดเป้าหมายไปยังตัวสร้างที่ไม่คิดค่าเสื่อมราคาภายในคลาสนั้น ดังนั้นการใช้งานในอุดมคติจะเป็นเช่นนี้:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
บิตบ้าในช่วงปลายเกม (ผมกว่า 11 ปีต่อมา - ! Egad ) แต่ฉันหวังว่านี้จะช่วยให้คนอื่น ๆ โดยเฉพาะอย่างยิ่งหากวิธีที่ปลายสุดจะยังคงคาดหวังว่า URI org.apache.commons.httpclient.setURI()
เช่น