Android-এ URL এনকোড করার পদ্ধতি
URL এনকোডিং (Percent Encoding) হলো বিশেষ ক্যারেক্টারগুলিকে নিরাপদ ASCII ফরম্যাটে রূপান্তর করার প্রক্রিয়া যাতে URL সঠিকভাবে কাজ করে। স্পেস, বাংলা অক্ষর, বিশেষ চিহ্ন ইত্যাদি URL-এ সরাসরি ব্যবহার করা যাবে না।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project এ যান এবং প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/btnEncode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:text="URL লোড করুন" />
</RelativeLayout>
ধাপ ৩: MainActivity.java বাস্তবায়ন করুন
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class MainActivity extends AppCompatActivity {
Button button;
private WebView webView;
private String baseUrl = "https://www.google.com/search?q=";
private String query;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
button = findViewById(R.id.btnEncode);
// WebView সেটিংস
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(getApplicationContext(), "পেজ লোড সম্পন্ন", Toast.LENGTH_SHORT).show();
}
});
button.setOnClickListener(v -> {
String searchTerm = "অ্যান্ড্রয়েড ডেভেলপমেন্ট বাংলা টিউটোরিয়াল"; // বাংলা টেক্সট
try {
// UTF-8 এনকোডিং ব্যবহার করে URL এনকোড করুন
query = URLEncoder.encode(searchTerm, "UTF-8");
String fullUrl = baseUrl + query;
webView.loadUrl(fullUrl);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
Toast.makeText(this, "এনকোডিং ত্রুটি: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
URLEncoder ব্যবহার করার নিয়ম
| প্যারামিটার | বর্ণনা |
|---|---|
String s |
এনকোড করা স্ট্রিং |
String enc |
ক্যারেক্টার এনকোডিং (সাধারণত "UTF-8") |
এনকোডিং উদাহরণ
| মূল স্ট্রিং | এনকোডেড স্ট্রিং |
|---|---|
android tutorial |
android+tutorial বা android%20tutorial |
hello world! |
hello+world%21 |
অ্যান্ড্রয়েড |
%E0%A6%85%E0%A6%A8%E0%A7%8D%E0%A6%A1%E0%A7%8D%E0%A6%B0%E0%A6%95%E0%A7%8D%E0%A6%AF%E0%A6%BE |
name=value&other=123 |
name%3Dvalue%26other%3D123 |
Uri.Builder ব্যবহার (আধুনিক এবং সুপারিশিত পদ্ধতি)
URLEncoder ম্যানুয়ালি কুয়েরি প্যারামিটার এনকোড করে। আরও ভালো এবং কম ত্রুটিযুক্ত পদ্ধতি হলো Uri.Builder ব্যবহার:
import android.net.Uri;
String url = new Uri.Builder()
.scheme("https")
.authority("www.google.com")
.appendPath("search")
.appendQueryParameter("q", "অ্যান্ড্রয়েড টিউটোরিয়াল") // অটোমেটিক এনকোড হবে
.appendQueryParameter("hl", "bn")
.build()
.toString();
// ফলাফল: https://www.google.com/search?q=%E0%A6%85%E0%A6%A8...&hl=bn
webView.loadUrl(url);
Retrofit/OkHttp-এ কুয়েরি প্যারামিটার
নেটওয়ার্ক লাইব্রেরি ব্যবহার করলে এনকোডিং অটোমেটিক হ্যান্ডেল হয়:
// Retrofit ইন্টারফেস
@GET("search")
Call<ResponseBody> search(@Query("q") String query, @Query("hl") String lang);
// কল
service.search("অ্যান্ড্রয়েড টিউটোরিয়াল", "bn").enqueue(...);
ধাপ ৪: AndroidManifest.xml-এ ইন্টারনেট পারমিশন যোগ করুন
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
URL ডিকোডিং (পڑশান)
যদি এনকোডেড URL থেকে মূল স্ট্রিং ফেরত পেতে চান:
import java.net.URLDecoder;
String encoded = "%E0%A6%85%E0%A6%A8%E0%A7%8D%E0%A6%A1%E0%A7%8D%E0%A6%B0%E0%A6%95%E0%A7%8D%E0%A6%AF%E0%A6%BE";
try {
String decoded = URLDecoder.decode(encoded, "UTF-8");
// ফলাফল: অ্যান্ড্রয়েড
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
সাধারণ ভুল এবং সমাধান
- দ্বিগুণ এনকোডিং: ইতিমধ্যে এনকোডেড স্ট্রিং আবার এনকোড করলে %2520 হয়। শুধুমাত্র রো (raw) স্ট্রিং এনকোড করুন।
- UTF-8 বাদ দেওয়া: সবসময়
"UTF-8"নির্দিষ্ট করুন, ডিফল্টের ওপর নির্ভর করবেন না। - পাথ এনকোড করা: URL পাথে (ডোমেনের পরে) স্ল্যাশ (/) এনকোড করবেন না। শুধুমাত্র কুয়েরি প্যারামিটার এনকোড করুন।
অ্যাপ্লিকেশন চালানোর পদ্ধতি
আপনার Android ডিভাইস কম্পিউটারের সাথে সংযুক্ত করুন। Android Studio-তে Run আইকনে ক্লিক করুন। "URL লোড করুন" বাটনে ক্লিক করলে WebView-এ গুগল সার্চ রেজাল্ট দেখাবে।
