এইচটিএমএল এনকোডিংয়ের সমস্যা - "& nbsp" এর পরিবর্তে "Â" অক্ষর প্রদর্শিত হচ্ছে


203

আমি একটি উত্তরাধিকারী অ্যাপ্লিকেশনটি মাত্র দুর্ব্যবহার করা শুরু করেছি, যে কোনও কারণেই আমি নিশ্চিত নই। এটি গুচ্ছ এইচটিএমএল তৈরি করে যা অ্যাক্টিভপিডিএফ দ্বারা পিডিএফ প্রতিবেদনে রূপান্তরিত হয়।

প্রক্রিয়াটি এইভাবে কাজ করে:

  1. প্রতিস্থাপনের জন্য টোকেন সহ একটি ডিবি থেকে একটি HTML টেমপ্লেটটি টানুন (যেমন "~ CompanyName ~", "~ গ্রাহক নাম ~", ইত্যাদি)
  2. টোকেনগুলি বাস্তব ডেটা দিয়ে প্রতিস্থাপন করুন
  3. একটি সহজ রেইগেক্স ফাংশন সহ এইচটিএমএলকে পরিপাটি করে যে বৈশিষ্ট্য এইচটিএমএল ট্যাগ বৈশিষ্ট্য মানগুলি বিন্যাস করে (কোটেশন চিহ্নগুলি ইত্যাদি নিশ্চিত করে যেহেতু অ্যাক্টিভপিডিএফ এর রেন্ডারিং ইঞ্জিনটি বৈশিষ্ট্যের মানগুলির চারপাশে একক উদ্ধৃতি ব্যতীত অন্য কিছুকে ঘৃণা করে)
  4. এইচটিএমএল একটি ওয়েব পরিষেবাতে প্রেরণ করুন যা পিডিএফ তৈরি করে।

এই কোথাও কোথাও, এইচটিএমএল টেমপ্লেট (  গুলি) থেকে অ-ব্রেকিং স্পেসগুলি আইএসও -8859-1 হিসাবে এনকোডিং করছে যাতে ব্রাউজারে (ফায়ারফক্স) নথিটি দেখার সময় তারা "Â" অক্ষর হিসাবে ভুলভাবে প্রদর্শিত হয়। অ্যাক্টিভপিডিএফ এই নন-ইউটিএফ 8 অক্ষরের উপরে উপস্থিত রয়েছে।

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

Private Shared Function ConvertToUTF8(ByVal html As String) As String
    Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
    Dim source As Byte() = isoEncoding.GetBytes(html)
    Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function

কোন ধারনা?

সম্পাদনা করুন:

আমি আপাতত এটি দিয়ে যাচ্ছি, যদিও এটি ভাল সমাধানের মতো মনে হয় না:

Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
    Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function

2
এইচটিএমএলটিতে এর চরিত্রের সেটটি বর্ণনা করতে কোনও মেটা ইনফরমিটন রয়েছে?
রোভল্যান্ড শ

1
[পূর্ববর্তী মন্তব্য মোছা হয়েছে] সংক্ষিপ্ত উত্তর: না।
সি

1
আমার জন্য কাজ করেছেন: utf8_decode ()
ursuleacv

উত্তর:


340

এই কোথাও কোথাও, এইচটিএমএল টেমপ্লেট (গুলি) থেকে অবিচ্ছেদী স্থানগুলি ISO-8859-1 হিসাবে এনকোডিং করছে যাতে তারা "Â" অক্ষর হিসাবে ভুলভাবে প্রদর্শিত হয়

এটি তখন ইউটিএফ -8 এ এনকোডিং হবে, আইএসও -8859-1 নয়। নন-ব্রেকিং স্পেস অক্ষরটি আইএসও -8859-1-তে বাইট 0xA0; যখন ইউটিএফ -8 এ এনকোড করা হয়েছে তখন এটি 0xC2,0xA0 হবে, যা আপনি যদি (ভুলভাবে) এটিকে আইএসও -8859-1 হিসাবে দেখেন তবে প্রকাশিত হবে " "। এর মধ্যে একটি পিছনের এনএসপিএস অন্তর্ভুক্ত রয়েছে যা আপনি সম্ভবত লক্ষ্য করছেন না; যদি সেই বাইটটি না থাকে, তবে আপনার ডকুমেন্টকে অন্য কিছু ম্যালড করেছে এবং কী খুঁজে বের করার জন্য আমাদের আরও অনুসন্ধান করা দরকার।

রিজ এক্সপ্স কী, টেম্পলেটিং কীভাবে কাজ করে? আপনার  স্ট্রিংগুলি (সঠিকভাবে) U + 00A0 নন-BREAKING স্পেস অক্ষরগুলিতে রূপান্তরিত করা হলে কোথাও কোনও উপযুক্ত HTML পার্সার জড়িত বলে মনে হচ্ছে। যদি তা হয় তবে আপনি কেবল নিজের টেম্পলেটটি ডিওমে স্থানীয়ভাবে প্রসেস করতে পারবেন এবং এএসসিআইআই এনকোডিং ব্যবহার করে অক্ষরীয় রেফারেন্স হিসাবে অ্যাস্কিআই অক্ষর রাখার জন্য এটি সিরিয়াল করতে বলবেন। এটি আপনাকে HTML এ রেগেক্স পোস্ট-প্রসেসিং করতেও বাধা দিতে পারে, যা সর্বদা চূড়ান্ত ব্যবসায় is

যাইহোক, আপাতত আপনি আপনার দস্তাবেজের নীচে একটি যুক্ত করতে <head>পারেন এবং এটি ব্রাউজারে এটি ঠিক দেখাচ্ছে কিনা তা দেখতে পারেন:

  • এইচটিএমএল 4 এর জন্য: <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  • এইচটিএমএল 5 এর জন্য: <meta charset="utf-8">

যদি আপনি এটি করে থাকেন তবে কোনও অবশিষ্ট সমস্যা হ'ল অ্যাক্টিভপিডিএফের দোষ।


20
আমি <meta charset="utf-8">এখনও সুপারিশ করব না। http-equivসংস্করণ HTML5 এর মধ্যে এখনও বৈধ এবং ভাল-সমর্থিত।
বোবিন্স



এটি সমস্ত আধুনিক ব্রাউজারে কাজ করে। এটি অবশ্যই সমস্ত উত্তরাধিকার এবং কুলুঙ্গি (উদাঃ মোবাইল) ব্রাউজারগুলিতে বা সমস্ত মাকড়সাতে কাজ করে না।
ববিনস

3
"কোথাও কোথাও এই জগাখিচুড়ি" ... LOL! সুন্দর খুলে! ভাল উত্তর! +1
ডিজাইন প্রতিরোধ

24

যদি কারও কারও আমার মতো একই সমস্যা হয় এবং চরসেটটি ইতিমধ্যে সঠিক ছিল, কেবল এটি করুন:

  1. .Html ফাইলের ভিতরে সমস্ত কোড অনুলিপি করুন।
  2. নোটপ্যাড (বা কোনও বেসিক পাঠ্য সম্পাদক) খুলুন এবং কোডটি পেস্ট করুন।
  3. "ফাইল -> হিসাবে সংরক্ষণ করুন" যান
  4. আপনার ফাইলের নাম "উদাহরণ.html" লিখুন ("প্রকার হিসাবে সংরক্ষণ করুন: সমস্ত ফাইল ( )" নির্বাচন করুন)
  5. ইউটিএফ -8 হিসাবে এনকোডিং নির্বাচন করুন
  6. সেভ হিট করুন এবং আপনি এখন আপনার পুরানো .html ফাইল মুছতে পারেন এবং এনকোডিংটি ঠিক করা উচিত

2
এটা আমার জন্য এটি। মহাবিশ্বে এটি UTF-8 with BOMপরিবর্তে বলে UTF-8। এটিকে উত্সাহ পাঠ্যে দেখতে, আপনাকে সেটিংস - ব্যবহারকারীতে show_encodingসেট করতে হবে true
J86

আমার যে সমস্যাটি ছিল showing পরিবর্তে », amd দেখানো এই সমাধানটি ব্যবহার করার সময় সমস্যাটি সমাধান হয়েছে তবে একটি পিএইচপি সতর্কতা রয়েছে: Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at D:\Program Files\wamp\wamp\www\projects\kerala\kerala_public_html\edit\business_details.php:1) in D:\Program Files\wamp\wamp\www\projects\kerala\kerala_public_html\user\include\fg_membersite.php on line 152
এসসিসি

এই সমাধানটি আমার পক্ষে কাজ করেছিল। আমি নোটপ্যাড ++ এ কাজ করছি এবং আমি যখন এটি ইউটিএফ -8 হিসাবে বেসিক এমএস নোটপ্যাডে সংরক্ষণ করেছি, নোটপ্যাড ++ এ নতুন ফাইলটি খোলার পরে, এনকোডিংটি ইউটিএফ-8-বিওএম-এ সেট করা হয়েছিল (যার অর্থ আমি নিশ্চিত না)। যাইহোক, এটা আমার জন্য সমস্যা বলে মনে হয়।
বোল্টকি

ধন্যবাদ! এই কৌশলটি। আমি অনুরোধ / প্রতিক্রিয়াতে দেখি যে ফাইলটি (আমার ক্ষেত্রে, এএসপিএক্স) ইউটিএফ -8 হিসাবে এনকোড হয়েছে। নোটপ্যাড ++ এটিও ইউটিএফ -8 এ এনকোড করেছে। ঠিক কী? তবে আপনি সমাধানটি কৌশলটি করেছেন। আমার জন্য, এটি একটি স্প্যানিশ বাক্যাংশ যা পৃষ্ঠাতে সঠিকভাবে এনকোডিং ছিল না। আমি স্পেনীয়দের জন্য ইউটিএফ -8 বিওএম না ব্যবহার করার জন্য অন্য কোথাও পড়েছি তবে এটি আমার জন্য এটি স্থির করেছে।
ব্যবহারকারী 3621633

13

সমস্যা: এমনকি আমি সিআরএম সিস্টেমে পোষ্ট অনুরোধে কিছু স্ট্রিং সহ '£' পাঠাচ্ছিলাম এমন সমস্যার মুখোমুখি হয়েছি , কিন্তু যখন আমরা সিআরএম থেকে জিইটি কল করছি, তখন এটি কিছু স্ট্রিং সামগ্রী দিয়ে returning ' ফিরিয়েছিল । সুতরাং আমরা যা বিশ্লেষণ করেছি তা হ'ল '£' 'Â £' তে রূপান্তরিত হচ্ছে ।

বিশ্লেষণ: গবেষণার পরে আমরা যে ত্রুটি পেয়েছি তা হ'ল পোস্ট পোস্টে আমরা এইচটিটিপিওয়েব্রেকস্ট কনটেন্ট টাইপকে "পাঠ্য / এক্সএমএল" হিসাবে সেট করেছি যখন জিইটি কলটিতে এটি ছিল "পাঠ্য / এক্সএমএল; চরসেট: ইউটিএফ -8"

সমাধান: সুতরাং সমাধানের অংশ হিসাবে আমরা চরসেটটি অন্তর্ভুক্ত করেছি : পোস্টের অনুরোধে utf-8 এবং এটি কাজ করে।


0

আমার ক্ষেত্রে কোডটি তৈরি করার জন্য ভিজ্যুয়াল স্টুডিও থেকে আমার নিজের সরঞ্জামটি ব্যবহার করে কোডটি তৈরি হয়েছিল (ক্যারেটযুক্ত একটি) in এটি সমাধান করা সহজ ছিল:

নথিতে একক স্পেস () নির্বাচন করুন। আপনি অন্যান্য একক স্পেস থেকে আলাদা দেখতে অনেকগুলি একক স্পেস দেখতে সক্ষম হবেন, সেগুলি নির্বাচিত নয়। এই অন্যান্য একক স্পেসগুলি নির্বাচন করুন - তারা ব্রাউজারে অযাচিত অক্ষরের জন্য দায়ী। একক স্থান () এর সাথে সন্ধান করুন এবং প্রতিস্থাপনে যান। সম্পন্ন.

PS: আপনি যখন কার্সারটিকে একটিতে রাখেন বা ভিএস2017 + এ এটি নির্বাচন করেন তখন সমস্ত অনুরূপ অক্ষরগুলি দেখতে আরও সহজ; আমি আশা করি অন্যান্য আইডিইতেও একই বৈশিষ্ট্য থাকতে পারে


-1

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

আইই (ব্রাউজার নির্দিষ্ট সিএসএস সহ) এর জন্য ফন্ট পরিবর্তন করার ক্ষেত্রে, আমি আরিয়ালের বডি ফন্ট হিসাবে সমস্যাটি সমাধান করে হেলভেটিকা-নিউ ব্যবহার করছিলাম।


হরফ স্যুইচ করার কারণ হতে পারে কারণ হ'ল ফন্টগুলির একটিতে চরিত্রটি প্রশ্নবিদ্ধ ছিল না, সুতরাং আপনি যা দেখেছেন তা খালি অক্ষর ছিল। তবে এটি সমস্যার সমাধান করেনি, এটি কেবল এটি আবৃত করে।
অলিভার হাউসলার

-2

আমি একই ধরণের সমস্যা ছিল। দৃশ্যত এটি কেবল কারণ পিএইচপি utf-8 স্বীকৃতি দেয় না।

আমি প্রথমে আমার চুলগুলি ছিঁড়ে ফেলছিলাম যখন একটি 'ver' চিহ্নটি ড্রিমওয়েভারে ঠিক আছে তা সত্ত্বেও, 'Â £' হিসাবে দেখাচ্ছিল। অবশেষে আমার মনে পড়ে আমি সূচক ফাইলের সাথে সম্পর্কিত লিঙ্কগুলির সাথে সমস্যা ছিল, যখন পৃষ্ঠাগুলি সরাসরি দেখা হয় স্লাইডশোতে কাজ করবে, তবে একটি অন্তর্ভুক্ত ব্যবহার করার সময় নয় (তবে এটি বিন্দুর পাশে রয়েছে Any যাইহোক আমি ভাবছিলাম যে এটি যদি হতে পারে তবে অনুরূপ সমস্যা, সুতরাং যে পৃষ্ঠাটিতে আমার সমস্যা হচ্ছে সেটির পরিবর্তে আমি কেবল সূচি.এফপি ফাইলটিতে রেখেছি - সমস্যাটি জুড়েই স্থির।


-2

এর কারণ পিএইচপি utf-8 স্বীকৃতি দেয় না।

এখানে আপনি এটি এইচটিএমএলে সমস্ত বিশেষ অক্ষরের জন্য এটি পরীক্ষা করতে পারেন

http://www.degraeve.com/reference/specialcharacters.php


1
এটি পিএইচপি সম্পর্কে কোনও প্রশ্ন ছিল না, এটি ভিবি.এনইটি।
সি

আমি না, তবে সমস্যাটি সমাধান করতে আপনি এই অক্ষরগুলি ব্যবহার করতে পারেন। এই আমার সমাধান স্থির।
al123

-2

ভাল আমি এই সমস্যাটি আমার কয়েকটি ওয়েবসাইটে পেয়েছি এবং আমাকে যা করতে হবে তা হ'ল এইচটিএমএল প্রবেশের জন্য সামগ্রী ফেলারটি কাস্টমাইজ করা। এর আগে আমি তাদের আরও মুছলাম মুছে ফেললাম, সুতরাং কেবলমাত্র আপনি এইচটিএমএল ফিটার বা পৃষ্ঠার জন্য পার্সিং ফাংশনটি পরিবর্তন করুন এবং এটি কার্যকর হয়েছে। এটি মূলত বেশিরভাগ সিএমএসে এইচটিএমএল সম্পাদকদের কারণে। যেভাবে তারা ডেটা পার্স করে তা এই সমস্যার কারণ হয়ে দাঁড়িয়েছে (আমার ক্ষেত্রে)। এটি আপনার ক্ষেত্রেও সহায়তা করবে

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