"” € ™ "পৃষ্ঠায়" "" এর পরিবর্তে দেখাচ্ছে


133

’পরিবর্তে আমার পৃষ্ঠায় প্রদর্শিত হয় '

আমি Content-Typeসেট UTF-8উভয় আমার মধ্যে <head>ট্যাগ এবং আমার HTTP- র হেডার:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

এখানে চিত্র বর্ণনা লিখুন

এছাড়াও, আমার ব্রাউজারটি এতে সেট করা আছে Unicode (UTF-8):

এখানে চিত্র বর্ণনা লিখুন

তাহলে সমস্যা কী, এবং আমি কীভাবে এটি ঠিক করতে পারি?


মধ্যে "মোজিবেক" দেখ stackoverflow.com/questions/38363566/...
রিক জেমস

উত্তর:


55

ব্রাউজার এবং সম্পাদক ইউএসএফ -8 এনকোডিংটি আইএসও -8859-1 / উইন্ডোজ-1252 এর পরিবর্তে ব্যবহার করছে তা নিশ্চিত করুন।

বা ব্যবহার &rsquo;


75
না, এটি সমাধান হয় না। আপনার অ্যাপ্লিকেশনটিতে অক্ষর এনকোডিংয়ের এখনও একটি অসঙ্গতি আছে। ভবিষ্যতে অন্যান্য নন- CP1252 টি অক্ষরের জন্য আপনি আবার একই সমস্যার মুখোমুখি হবেন। এবং তাদের মধ্যে অনেকগুলি রয়েছে ...
বালুসসি

12
আপনি যে অক্ষরের মুখোমুখি হতে চলেছেন তার উদাহরণ: i18nqa.com/debug/utf8-debug.html
জুট করুন

utf-8 এনকোডিং +1
করুহঙ্গা

217

তো সমস্যাটা কী,

এটি এমন একটি ( RIGHT SINGLE QUOTATION MARK- ইউ + 2019) চরিত্র যা ইউটিএফ -8 এর পরিবর্তে সিপি -1252 হিসাবে ডিকোড করা হচ্ছে । আপনি না পরীক্ষা যদি এনকোডিং টেবিল, তাহলে আপনি দেখতে যে এই অক্ষর হল UTF-8 বাইট গঠিত হয় , এবং । আপনি না পরীক্ষা যদি সিপি-1252 কোড পৃষ্ঠার লেআউট , তাহলে আপনি ঐ বাইটের প্রতিটি অক্ষরের জন্য দাঁড়ানো দেখতে পাবেন , এবং ।0xE20x800x99â


এবং আমি কীভাবে এটি ঠিক করতে পারি?

অক্ষরগুলি পড়তে, লিখতে, সঞ্চয় করতে এবং প্রদর্শন করতে সিপি -1222 এর পরিবর্তে ইউটিএফ -8 ব্যবহার করুন।


আমার <head>ট্যাগ এবং আমার এইচটিটিপি শিরোলেখগুলিতে আমার কাছে সামগ্রী-প্রকারটি ইউটিএফ -8 এ সেট আছে :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

এটি কেবলমাত্র ক্লায়েন্টকে নির্দেশ দেয় যা অক্ষরগুলি ব্যাখ্যা এবং প্রদর্শন করতে এনকোডিং ব্যবহার করে। অক্ষরগুলি পড়তে, লিখতে, সঞ্চয় করতে এবং প্রদর্শন করতে এনকোডিংয়ের জন্য এটি আপনার নিজস্ব প্রোগ্রামকে নির্দেশ দেয় না The সঠিক উত্তরটি সার্ভারের পাশের প্ল্যাটফর্ম / ডাটাবেস / প্রোগ্রামিং ভাষার উপর নির্ভর করে। মনে রাখবেন যে এইচটিটিপি রেসপন্স শিরোনামের মধ্যে একটি সেট এইচটিএমএল মেটা ট্যাগের চেয়ে বেশি। এইচটিএমএল মেটা ট্যাগটি কেবল তখনই ব্যবহৃত হত যখন পৃষ্ঠাটি HTTP এর পরিবর্তে স্থানীয় ডিস্ক ফাইল সিস্টেম থেকে খোলা হবে।


এছাড়াও, আমার ব্রাউজারটি এতে সেট করা আছে Unicode (UTF-8):

এটি কেবলমাত্র ক্লায়েন্টকে বাধ্য করে যা অক্ষরগুলি ব্যাখ্যা এবং প্রদর্শন করতে এনকোডিং ব্যবহার করে। তবে আসল সমস্যাটি হ'ল আপনি ইতিমধ্যে ’ক্লায়েন্টের পরিবর্তে ক্লায়েন্টকে (ইউটিএফ -8 এ এনকোডড) প্রেরণ করছেন । ক্লায়েন্টটি সঠিকভাবে ’ইউটিএফ -8 এনকোডিং ব্যবহার করে প্রদর্শিত হচ্ছে । যদি ক্লায়েন্টটি ব্যবহারের জন্য ভুল নির্দেশনা দেওয়া হয়, উদাহরণস্বরূপ আইএসও -8859-1, আপনি সম্ভবত এর ââ¬â¢পরিবর্তে দেখতে পেতেন ।


আমি একটি ডাটাবেস সহ এএসপি.এনইটি ২.০ ব্যবহার করছি।

এটি সম্ভবত আপনার সমস্যাটি রয়েছে is ডেটা দেখতে কেমন লাগে তা একটি স্বাধীন ডাটাবেস সরঞ্জাম দিয়ে আপনাকে যাচাই করতে হবে।

তাহলে চরিত্র আছে, তারপর আপনি সঠিকভাবে ডাটাবেসের সাথে সংযোগ নেই। ইউটিএফ -8 ব্যবহার করতে আপনাকে ডাটাবেস সংযোগকারীকে বলতে হবে।

যদি আপনার ডাটাবেসটিতে থাকে ’, তবে এটি আপনার ডেটাবেসটি গোলমেলে পড়েছে। সম্ভবত টেবিলগুলি ব্যবহারের জন্য কনফিগার করা হয়নি UTF-8। পরিবর্তে, তারা ডাটাবেসের ডিফল্ট এনকোডিং ব্যবহার করে, যা কনফিগারেশনের উপর নির্ভর করে পরিবর্তিত হয়। এটি যদি আপনার সমস্যা হয় তবে সাধারণত ইউটিএফ -8 ব্যবহারের জন্য সারণীতে পরিবর্তন করা যথেষ্ট। যদি আপনার ডাটাবেস এটি সমর্থন করে না, আপনাকে টেবিলগুলি পুনরায় তৈরি করতে হবে। আপনি যখন টেবিলটি তৈরি করবেন তখন এনকোডিংটি সেট করা ভাল অনুশীলন।

আপনি সম্ভবত এসকিউএল সার্ভার ব্যবহার করছেন তবে এখানে কিছু মাইএসকিউএল কোড রয়েছে ( এই নিবন্ধটি থেকে অনুলিপি করা হয়েছে ):

CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;

যদি আপনার টেবিলটি ইতিমধ্যে ইউটিএফ -8 হয়, তবে আপনাকে আবার একটি পদক্ষেপ নেওয়া দরকার। কে বা কী সেখানে ডেটা রাখে। এটা যেখানে সমস্যা। একটি উদাহরণ হ'ল এইচটিএমএল ফর্ম জমা দেওয়া মানগুলি যা ভুলভাবে এনকোড / ডিকোডড।


সমস্যাটি সম্পর্কে আরও জানার জন্য এখানে আরও কয়েকটি লিঙ্ক রয়েছে:


2
আপনি যদি এই কোথাও সংরক্ষণের মতো সামগ্রীগুলি ভাঙা থাকেন যেমন একটি মাইএসকিএল ডাটাবেজে, স্ট্যাকওভারফ্লো.com/ a/ 9407998 / 117647 এর অক্ষরগুলি আপনাকে utf-8 এ রূপান্তরিত করতে হবে
স্টিভ

5
টি এল; ডিআর; অক্ষরগুলি পড়তে, লিখতে, সঞ্চয় করতে এবং প্রদর্শন করতে UTF-8 ব্যবহার করুন।
c0degeas

নোট করুন যে আইসো -8859-1 এবং উইন্ডোজ -1222 টেবিলগুলি ওভারল্যাপ হয়ে গেছে, সুতরাং কিছু "অদ্ভুত অক্ষরগুলির সংমিশ্রণ" উভয়ের পক্ষেই সাধারণ (যেমন "é" এর জন্য "Ã ©")।
স্কিপি লে গ্র্যান্ড গৌরু

15

আমার কিছু ডকুমেন্ট রয়েছে যেখানে প্রদর্শিত ছিল …এবং êযেমন প্রদর্শিত হচ্ছে ê। এটি এখানে কীভাবে এসেছে (পাইথন কোড):

# Adam edits original file using windows-1252
windows = '\x85\xea' 
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX

# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)

# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)

# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")

assert utf8==detwingled

সমস্যা সমাধানের জন্য, আমি পাইথন কোডটি এরকম ব্যবহার করেছি:

with open("dirty.html","rb") as f:
    dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
    g.write(ct)

(যেহেতু কেউ সঠিকভাবে ইউটিএফ -8 নথিতে দ্বিগুণ সংস্করণটি hadোকানো হয়েছিল, আমি আসলে কেবল দ্বিগুণ অংশটি বের করে আনতে পেরেছিলাম, এটি পুনরুদ্ধার করে এটি আবার প্রবেশ করিয়েছিলাম this আমি এর জন্য বিউটিফুলসপ ব্যবহার করেছি))

ওয়েব সার্ভারের কনফিগারেশনটি ভুল হওয়ার চেয়ে বিষয়বস্তু তৈরিতে আপনার চার্লি থাকার সম্ভাবনা অনেক বেশি। আপনি utf-8 নথির জন্য উইন্ডোজ -১২২২ এনকোডিং নির্বাচন করে পৃষ্ঠাটি দ্বিগুণ করতে আপনার ওয়েব ব্রাউজারকে জোর করতে পারেন। আপনার ওয়েব ব্রাউজারটি চার্লি যে দস্তাবেজটি সংরক্ষণ করেছে সেগুলি নকল করতে পারে না।

দ্রষ্টব্য : উইন্ডোজ -১২২২ এর পরিবর্তে অন্য কোনও একক-বাইট কোড পৃষ্ঠাতে (যেমন লাতিন -১) একই সমস্যা দেখা দিতে পারে।


14

(ইউনিকোড কোডপয়েন্ট U+2019 RIGHT SINGLE QUOTATION MARK) ইউটিএফ -8 এ বাইট হিসাবে এনকোড করা হয়েছে:

0xE2 0x80 0x99

’(ইউনিকোড কোডপয়েন্টস U+00E2 U+20AC U+2122) ইউটিএফ -8 এ বাইট হিসাবে এনকোড করা হয়েছে:

0xC3 0xA2   0xE2 0x82 0xAC   0xE2 0x84 0xA2

আপনার ব্রাউজারটি ’ইউটিএফ -8 হিসাবে প্রক্রিয়াজাত হওয়ার সময় উত্পাদনের জন্য প্রকৃত অর্থে প্রাপ্ত এই বাইটগুলি ।

এর অর্থ হল যে আপনার উত্স ডেটা ব্রাউজারে প্রেরণের আগে দুটি চরসেট রূপান্তরগুলির মধ্য দিয়ে চলেছে :

  1. উত্স অক্ষর ( U+2019) প্রথমে ইউটিএফ -8 বাইট হিসাবে এনকোড করা হয়েছে:

    0xE2 0x80 0x99

  2. ঐ ব্যক্তি বাইট তারপর হওয়ার ভুল ব্যাখ্যা করা এবং ইউনিকোড codepoints করার সঙ্কেতমুক্ত U+00E2 U+20AC U+2122এক দ্বারা উইন্ডোজ 125X ক্যারেক্টার-সেট (1252, 1254, 1256, এবং 1258 সমস্ত মানচিত্র 0xE2 0x80 0x99থেকে U+00E2 U+20AC U+2122), এবং তারপর সেই codepoints হল UTF-8 বাইট হিসাবে এনকোডেড হচ্ছে:

    0xE2-> U+00E2-> 0xC3 0xA2
    0x80-> U+20AC-> 0xE2 0x82 0xAC
    0x99-> U+2122->0xE2 0x84 0xA2

দ্বিতীয় ধাপে অতিরিক্ত রূপান্তরটি কোথায় করা হচ্ছে তা খুঁজে বের করে এটি সরিয়ে ফেলতে হবে।


12

উইন্ডোজ -১২২২ থেকে ইউটিএফ -8 এ দু'বার স্ট্রিং রূপান্তরিত হলে এটি কখনও কখনও ঘটে ।

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

  1. নিশ্চিত করুন জেনড এবং পিএইচপি ইউটিএফ -8-তে ডাটাবেসের সাথে যোগাযোগ করছে (এটি ডিফল্টরূপে ছিল না )

  2. এই জাতীয় বেশ কয়েকটি এসকিউএল প্রশ্নের সাথে ভাঙা অক্ষরগুলি মেরামত করুন ...

    UPDATE MyTable SET 
    MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
    MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
    

    প্রয়োজনীয় হিসাবে অনেকগুলি টেবিল / কলামের জন্য এটি করুন।

আপনি প্রয়োজনে পিএইচপি এই স্ট্রিংগুলির কিছু ঠিক করতে পারেন। নোট করুন যে অক্ষরগুলিকে দুবার এনকোড করা হয়েছে , তাই আমাদের আসলে ইউটিএফ -8 থেকে উইন্ডোজ -১২২২ এ ফিরে যাওয়ার বিপরীত রূপান্তর করা দরকার যা প্রথমে আমাকে বিভ্রান্ত করেছিল।

mb_convert_encoding('’', 'Windows-1252', 'UTF-8');    // returns ’

9

আপনার চরিত্রের এনকোডিংয়ে আপনার কোনও মিল নেই; আপনার স্ট্রিংটি একটি এনকোডিং (ইউটিএফ -8) এ এনকোড হয়েছে এবং এই পৃষ্ঠার যা ব্যাখ্যা করা হচ্ছে তা অন্য ব্যবহার করছে (বলুন ASCII)।

সর্বদা আপনার http শিরোনামগুলিতে আপনার এনকোডিং নির্দিষ্ট করুন এবং নিশ্চিত করুন যে এটি আপনার কাঠামোর এনকোডিংয়ের সংজ্ঞা সাথে মেলে matches

নমুনা HTTP শিরোনাম:

Content-Type    text/html; charset=utf-8

এ্যাসটনেটে এনকোডিং সেট করা হচ্ছে

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

জেএসপিতে এনকোডিং সেট করা হচ্ছে


7

যদি আপনার সামগ্রীর ধরণটি ইতিমধ্যে UTF8 হয়, তবে সম্ভবত ডেটাটি ইতিমধ্যে ভুল এনকোডিংয়ে পৌঁছেছে। আপনি যদি কোনও ডাটাবেস থেকে ডেটা পেয়ে থাকেন তবে নিশ্চিত হয়ে নিন যে ডাটাবেস সংযোগটি ইউটিএফ -8 ব্যবহার করে।

যদি এটি কোনও ফাইলের ডেটা হয় তবে নিশ্চিত হয়ে নিন যে ফাইলটি ইউটিএফ -8 হিসাবে সঠিকভাবে এনকোড হয়েছে। আপনি সাধারণত এটি আপনার পছন্দের সম্পাদকের "হিসাবে সংরক্ষণ করুন ..." ডায়ালগটিতে সেট করতে পারেন।

উত্স ফাইলে এটি দেখার সময় যদি ডেটা ইতিমধ্যে নষ্ট হয়ে যায় তবে সম্ভাবনা থাকে যে এটি কোনও ইউটিএফ -8 ফাইল হিসাবে ব্যবহৃত হত তবে পথের পাশাপাশি কোথাও ভুল এনকোডিংয়ে সেভ হয়েছিল।


4

ওয়ার্ডপ্রেস ওয়েবসাইটে যদি কেউ এই ত্রুটিটি পান তবে আপনার ডাব্লুপি-কনফিগারেশন ডিবি চরসেটটি পরিবর্তন করতে হবে:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

পরিবর্তে:

define('DB_CHARSET', 'utf8mb4');

0

ডিবিভারে (বা অন্যান্য সম্পাদক) আপনি যে স্ক্রিপ্ট ফাইলটিতে কাজ করছেন তা ইউটিএফ 8 হিসাবে সংরক্ষণের অনুরোধ জানাতে পারে এবং এটি চরটি পরিবর্তন করবে:

€ "

মধ্যে

–

অথবা

–

-1

আপনার অবশ্যই ওয়ার্ড ডকুমেন্ট থেকে কপি / পেস্ট পাঠ্য থাকতে হবে। শব্দ নথি স্মার্ট উদ্ধৃতি ব্যবহার করে। আপনি এটিকে বিশেষ অক্ষর (& rsquo;) দিয়ে প্রতিস্থাপন করতে পারেন বা কেবল আপনার HTML সম্পাদক (') এ টাইপ করতে পারেন।

আমি নিশ্চিত এটি আপনার সমস্যার সমাধান করবে।


-3

আমার সাথে একই ঘটনা ঘটেছে '-' চরিত্রের সাথে (দীর্ঘ বিয়োগ চিহ্ন)।
আমি এই সরল প্রতিস্থাপনটি ব্যবহার করেছি তাই এটি সমাধান করুন:

htmlText = htmlText.Replace('–', '-');

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