java.net.URLEncoder.encode (স্ট্রিং) অবচয় করা হয়েছে, এর পরিবর্তে আমার কী ব্যবহার করা উচিত?


192

ব্যবহার করার সময় আমি নিম্নলিখিত সতর্কতাটি পাই java.net.URLEncoder.encode:

সতর্কতা: [অবচয়] এনকোড (জাভা.লাং। স্ট্রিং)
         java.net.URLEncoder এ অবচয় করা হয়েছে

পরিবর্তে আমার কী ব্যবহার করা উচিত?


23
ডক্সে অবমূল্যায়ন ট্যাগে এটির উত্তর দেওয়া হয়েছে: "পরিবর্তে, এনকোডিং নির্দিষ্ট করতে এনকোড (স্ট্রিং, স্ট্রিং) পদ্ধতিটি ব্যবহার করুন।" Java.sun.com/javase/6/docs/api/java/net/URLEncoder.html দেখুন ।
মাইকেল ময়র্স

উত্তর:


278

ইউআরএলএনসি কোডারে অন্য encodeপদ্ধতিটি ব্যবহার করুন :

URLEncoder.encode(String, String)

প্রথম প্যারামিটারটি এনকোড করার পাঠ্য; দ্বিতীয়টি ব্যবহার করার জন্য অক্ষরটির এনকোডিংয়ের নাম (যেমন, UTF-8)। উদাহরণ স্বরূপ:

System.out.println(
  URLEncoder.encode(
    "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);

14
@ জ্যাশ: আমি বিভ্রান্ত, কেন সেখানে ইউআরএলডাইকোডার হওয়া উচিত নয়? কেন এটি জাভা ফুলেছে? এগুলি স্থির পদ্ধতি। এটি টাইপ করতে একই পরিমাণে প্রচেষ্টা নিতে হবে। আপনি যদি পাইথন পছন্দ করেন তবে আপনি জাভাতে প্রোগ্রামিং করছেন কেন? পাইথনের চেয়ে বেশি লোক জাভা ব্যবহার করে এবং আপনি পাইথনের চাকরীর পরিবর্তে একটি জাভা চাকরি পেয়েছেন?
স্টেপানিয়ান

10
তিনি এটিকে ফুলে ফেঁপে উঠছেন কারণ এটি বিশ্বব্যাপী শ্রেণির নেমস্পেসকে অতিরিক্ত উপচে ফেলেছে। আপনি যখন URL.encode এবং URL.decode, অথবা এমনকি URLEncoder.decode থাকতে পারতেন কেন কেন URLEncoder.encode এবং URLDecoder.decode থাকে? কেন এগুলি সব অপ্রয়োজনীয় এবং ফুলে ফুলে? কারণ এর জবা।
বিটি

30
এবং তারপরে আপনাকে অসমর্থিত এনকোডিংএক্সসেপশন পরিচালনা করতে হবে, যদিও ইউটিএফ -8 সর্বত্র বেশিরভাগ ক্ষেত্রে সমর্থন করা উচিত।
ডেভ ক্যামেরন

8
@tc .: জাভা 7 এই ধ্রুবক চালু: StandardCharsets.US_ASCII, StandardCharsets.UTF_8ইত্যাদি দুর্ভাগ্যবশত, URLEncoder.encodeএকটি গ্রহণ করে না Charset... (কিন্তু অন্যান্য অনেক moethods না)।
সেলসেকে

12
গৌণ পরামর্শ - ব্যবহার 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]"। পছন্দসই "ইউটিএফ -8" পেতে তার name()পরিবর্তে এর পদ্ধতিটি ব্যবহার করুন।
এট_ল


24

URLEncoder শ্রেণিটি ব্যবহার করুন :

URLEncoder.encode(String s, String enc)

কোথায় :

s - অনুবাদ করা স্ট্রিং।

এনক - একটি সমর্থিত অক্ষর এনকোডিংয়ের নাম ।

স্ট্যান্ডার্ড চরসেট:

ইউএস-এএসসিআইআই সেভেন-বিট এএসসিআইআই, ওরফে আইএসও 6466-ইউএস, ইউনিকোড চরিত্রের বেসিক ল্যাটিন ব্লকটি আইএসও -৮ -৮৯-১ আইএসও ল্যাটিন বর্ণমালা নং 1 সেট করেছে, ওরফে আইএসও-ল্যাটিন -১

UTF-8 আট-বিট ইউসিএস রূপান্তর ফর্ম্যাট

UTF-16BE ষোল-বিট ইউসিএস রূপান্তর ফর্ম্যাট, বড়-এন্ডিয়ান বাইট অর্ডার

UTF-16LE ষোল-বিট ইউসিএস রূপান্তর ফর্ম্যাট, ছোট-এন্ডিয়ান বাইট ক্রম

UTF-16 ষোল-বিট ইউসিএস রূপান্তর ফর্ম্যাট, বাইট ক্রম একটি alচ্ছিক বাইট-অর্ডার চিহ্ন দ্বারা চিহ্নিত

উদাহরণ:

import java.net.URLEncoder;

String stringEncoded = URLEncoder.encode(
    "This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");

1

প্রথম প্যারামিটারটি স্ট্রিংটি এনকোড করা; দ্বিতীয়টি ব্যবহার করতে অক্ষরটির এনকোডিংয়ের নাম (যেমন, ইউটিএফ -8)।


0

অন্যান্য প্রতিক্রিয়াগুলির জন্য অতিরিক্ত রেফারেন্স হিসাবে, "ইউটিএফ -8" ব্যবহার না করে আপনি ব্যবহার করতে পারেন:

HTTP.UTF_8

যা জাভা ৪ এর পর থেকে org.apache.http.protocol লাইব্রেরির অংশ হিসাবে অন্তর্ভুক্ত, যা অ্যান্ড্রয়েড API 1 এর পরেও অন্তর্ভুক্ত।


ভুল , এই শ্রেণিটি অ্যাপাচি এইচটিটিপি ক্লায়েন্ট 4.x গ্রন্থাগার org.apache.http.protocol.HTTPক্লাসে পাওয়া যায় ।
বুহাকে সিন্ধি

@ বুহাকসিন্ডি সত্য, আমি এআইপিএ 1 পড়ি তবে এটি অ্যান্ড্রয়েডের জাভা নয়, এটি জাভা before এর আগে যেভাবেই বিদ্যমান ছিল, এটি ইতিমধ্যে হাহাহাও হয়েছে।
htafoya

না, এই শ্রেণীর কখনো জাভা JDK এর কোনো সংস্করণ অস্তিত্ব। অ্যান্ড্রয়েড অ্যাপাচি এইচটিটিপিপ্লায়েন্ট লাইব্রেরি অনুসরণ করে (তারা সেখান থেকে উত্স কোডটি গ্রহণ করলে আমি অবাক হব না)।
বুহাকে সিন্দি

3
সতর্কতা: [অবচয়] HTTP- র UTF_8 হ্রাস করা হয়েছে
sgtdck

0

ব্যবহার org.apache.commons.httpclient.URIকঠোরভাবে একটি সমস্যা নয়; কি একটি বিষয় যে আপনি ভুল কন্সট্রাকটর, যা লক্ষ্য করা হয় মূল্যমান হ্রাস।

ঠিক ব্যবহার করা হচ্ছে

new URI( [string] );

অবজ্ঞিত হিসাবে এটি অবশ্যই পতাকাঙ্কিত করবে। যা দরকার তা হ'ল কমপক্ষে একটি অতিরিক্ত যুক্তি সরবরাহ করা (প্রথম, নীচে), এবং আদর্শভাবে দুটি:

  1. escaped: সত্য যদি ইউআরআই চরিত্রের ক্রম পালানো আকারে থাকে। অন্যথায় মিথ্যা।
  2. charset: অক্ষরটি এনকোডিংয়ের জন্য অক্ষর স্ট্রিং, প্রয়োজন হলে if

এটি class শ্রেণীর মধ্যে একটি অবহিত নির্মাতাকে লক্ষ্য করবে। সুতরাং একটি আদর্শ ব্যবহার যেমন হবে:

new URI( [string], true, StandardCharsets.UTF_8.toString() );

গেমটিতে কিছুটা ক্রেজি-দেরী (11 বছরেরও বেশি পরে একটি চুল - উদাহরণস্বরূপ! ) তবে আমি আশা করি এটি অন্য কাউকে সহায়তা করে, বিশেষত যদি শেষ প্রান্তের পদ্ধতিটি এখনও কোনও ইউআরআই আশা করে, যেমন org.apache.commons.httpclient.setURI()

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.