আমি সের্স পার্সার অফ জেরেস ব্যবহার করে একটি এক্সএমএল ফাইল পার্স করছি।
এক্সএমএল ঘোষণা কি <?xml version="1.0" encoding="UTF-8"?>প্রয়োজনীয়?
আমি সের্স পার্সার অফ জেরেস ব্যবহার করে একটি এক্সএমএল ফাইল পার্স করছি।
এক্সএমএল ঘোষণা কি <?xml version="1.0" encoding="UTF-8"?>প্রয়োজনীয়?
উত্তর:
এক্সএমএল 1.0 এ, এক্সএমএল ঘোষণাটি is চ্ছিক । এক্সএমএল 1.0 সুপারিশের বিভাগ 2.8 দেখুন , যেখানে এটি বলে যে এটি "ব্যবহার করা উচিত" - যার অর্থ এটি প্রস্তাবিত, তবে বাধ্যতামূলক নয়। এক্সএমএল ১.১ এ তবে ঘোষণাটি বাধ্যতামূলক । এক্সএমএল 1.1 সুপারিশের বিভাগ 2.8 দেখুন , যেখানে এটি বলেছে "আবশ্যক" ব্যবহার করা উচিত। এটি এমনকি রাষ্ট্রের যায় যে যদি ঘোষণা অনুপস্থিত, যা স্বয়ংক্রিয়ভাবে বোঝা ডকুমেন্ট একটি XML 1.0 নথি।
লক্ষ্য করুন একটি ইন এক্সএমএল ঘোষণাencoding এবং standaloneউভয় ঐচ্ছিক। কেবল versionবাধ্যতামূলক। এছাড়াও, এগুলি কোনও বৈশিষ্ট্য নয়, সুতরাং যদি তারা উপস্থিত থাকে তবে অবশ্যই সেগুলি অবশ্যই এই ক্রমে থাকতে হবে: versionতারপরে যেকোনও encodingঅনুসরণ করা হবে standalone।
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
আপনি যদি এইভাবে এনকোডিং নির্দিষ্ট না করেন তবে এক্সএমএল পার্সাররা কী এনকোডিংটি ব্যবহার হচ্ছে তা অনুমান করার চেষ্টা করে। এক্সএমএল ১.০ প্রস্তাবনাটি এমন একটি সম্ভাব্য উপায় বর্ণনা করে যাতে চরিত্রের এনকোডিংটি স্বয়ংক্রিয়ভাবে আবিষ্কার করা যায় । বাস্তবে, ইনপুটটি ইউটিএফ -8, ইউটিএফ -16 বা ইউএস-এএসসিআইআই হিসাবে এনকোড করা থাকলে এটি খুব বেশি সমস্যা হয় না। 8-বিট এনকোডিংগুলির সাথে মুখোমুখি হলে স্বয়ংক্রিয়ায়ন কাজ করে না যখন ইউএস-এএসসিআইআই রেঞ্জের (যেমন আইএসও 8859-1) অক্ষর ব্যবহার করে - আপনি যদি পারেন তবে এগুলি তৈরি করা এড়ান।
standaloneইঙ্গিত কিনা XML দস্তাবেজে সঠিকভাবে DTD ছাড়া বা না প্রসেস করা যাবে। মানুষ খুব কমই এটি ব্যবহার করে। এই দিনগুলিতে এটি একটি এক্সএমএল ফর্ম্যাট ডিজাইন করা খারাপ যা এটির ডিটিডি ছাড়াই তথ্য হারিয়েছে।
হালনাগাদ:
একটি "প্রোলোগ ত্রুটি / অবৈধ utf-8 এনকোডিং" ত্রুটিটি নির্দেশ করে যে ফাইলের মধ্যে থাকা পার্সারটি পাওয়া প্রকৃত ডেটা এনকোডিংয়ের সাথে মেলে না যেটি এক্সএমএল ঘোষণাটি বলে। বা কিছু ক্ষেত্রে ফাইলের অভ্যন্তরের ডেটা স্বয়ংক্রিয় অনুসন্ধানকৃত এনকোডিংয়ের সাথে মেলে না।
যেহেতু আপনার ফাইলে একটি বাইট-অর্ডার-চিহ্ন (বিওএম) রয়েছে এটি ইউটিএফ -16 এনকোডিংয়ে থাকা উচিত। আমার সন্দেহ হয় যে <?xml version="1.0" encoding="UTF-8"?>নোটপ্যাডের মাধ্যমে ফাইলটি ইউটিএফ -16 এ পরিবর্তিত হয়ে যাওয়ার পরে আপনার ঘোষণাপত্রটি যা স্পষ্টতই ভুল বলেছে । সহজ সমাধানটি হ'ল সরানো encodingএবং সহজভাবে বলা <?xml version="1.0"?>। আপনি এটি বলতে এডিটও করতে পারেন encoding="UTF-16"তবে এটি মূল ফাইলের (যা ইউটিএফ -16 এ ছিল না) ভুল হবে বা যদি ফাইলটি কোনওভাবে ইউটিএফ -8 বা অন্য কোনও এনকোডিংয়ে ফিরে আসে।
বিওএম সরিয়ে দেওয়ার চেষ্টা করে বিরক্ত করবেন না - এটি সমস্যার কারণ নয়। এক্সএমএল সম্পাদনা করতে নোটপ্যাড বা ওয়ার্ডপ্যাড ব্যবহার করা আসল সমস্যা!
এক্সএমএল ঘোষণা alচ্ছিক তাই আপনার এক্সএমএলটি এটি ব্যতীত সু-গঠনযুক্ত। তবে এটি ব্যবহার করার পরামর্শ দেওয়া হয় যাতে পার্সারদের দ্বারা বিশেষত ব্যবহৃত এনকোডিং সম্পর্কে ভুল অনুমানগুলি তৈরি না হয়।
এটি কেবল তখনই প্রয়োজন যখন আপনি ডিফল্ট মানগুলি ব্যবহার করেন না versionএবং encoding(যা আপনি সেই উদাহরণটিতে রয়েছেন )।