সি ++ তে ইউনিকোড প্রক্রিয়াজাতকরণ


107

সি ++ তে ইউনিকোড প্রসেসিংয়ের সেরা অনুশীলন কী?

উত্তর:


81
  • আপনার ডেটা (বা অনুরূপ লাইব্রেরি) নিয়ে কাজ করার জন্য আইসিইউ ব্যবহার করুন
  • আপনার নিজস্ব ডেটা স্টোরে, নিশ্চিত করুন যে সবকিছু একই এনকোডিংয়ে সঞ্চিত আছে
  • নিশ্চিত হয়ে নিন যে আপনি সর্বদা আপনার ইউনিকোড লাইব্রেরিটি স্ট্রিং দৈর্ঘ্য, মূলধনের স্থিতি ইত্যাদির মতো জাগতিক কাজের জন্য ব্যবহার করছেন Never যেমনটি is_alphaআপনি চান না এমন সংজ্ঞা না থাকলে কখনও কখনও স্ট্যান্ডার্ড লাইব্রেরি বিল্টইনগুলি ব্যবহার করবেন না।
  • আমি এটি পর্যাপ্তরূপে বলতে পারি না: আপনি যদি সঠিকতার বিষয়ে চিন্তা করেন তবে এর সূচকগুলি নিয়ে কখনও পুনরাবৃত্তি করবেন না string, এর জন্য সর্বদা আপনার ইউনিকোড লাইব্রেরি ব্যবহার করুন।

আপনি যদি stringবাইনারি ডেটা হিসাবে চিকিত্সা না করেন তবে।
ডেমি

10

আপনি যদি পূর্ববর্তী সি ++ স্ট্যান্ডার্ডগুলির সাথে পিছনের সামঞ্জস্যতা সম্পর্কে চিন্তা না করেন তবে বর্তমান সি ++ 11 স্ট্যান্ডার্ডটি ইউনিকোড সমর্থনে তৈরি করেছে: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf

সুতরাং সি ++ তে ইউনিকোড প্রসেসিংয়ের জন্য সত্যিকারের সেরা অনুশীলনটি হ'ল এর জন্য বিল্ট ইন সুবিধাগুলি ব্যবহার করা। পুরানো কোড ঘাঁটিগুলির সাথে এটি সর্বদা কোনও সম্ভাবনা নয় তবে বর্তমানে মানটি এত নতুন।

সম্পাদনা: পরিষ্কার করার জন্য, সি ++ 11 হ'ল ইউনিকোড সচেতন যে এটিতে এখন ইউনিকোড আক্ষরিক এবং ইউনিকোড স্ট্রিংয়ের সমর্থন রয়েছে। তবে মানক পাঠাগারটিতে ইউনিকোড প্রক্রিয়াজাতকরণ এবং রূপান্তরকরণের জন্য কেবল সীমিত সমর্থন রয়েছে । আপনার বর্তমান প্রয়োজনের জন্য এটি যথেষ্ট হতে পারে। তবে, এখনই যদি আপনাকে প্রচুর পরিমাণে ভারী উত্তোলন করতে হয় তবে আপনাকে আরও গভীর-প্রক্রিয়াজাতকরণের জন্য এখনও আইসিইউ জাতীয় কিছু ব্যবহার করতে হতে পারে । বিভিন্ন এনকোডিংয়ের মধ্যে পাঠ্য রূপান্তরকরণের জন্য আরও দৃust় সমর্থন অন্তর্ভুক্ত করার জন্য বর্তমানে কয়েকটি প্রস্তাব রয়েছে। আমার অনুমান (এবং আশা) যে এই পরবর্তী অংশ হতে হবে প্রযুক্তিগত রিপোর্ট


একটি খসড়া স্ট্যান্ডার্ড ডক এর সাথে এই লিঙ্কটি আপনি যে আলোচনা করছেন সেই "বিভাগে ইউনিকোড সমর্থনে অন্তর্নিহিত" বর্ণিত একটি নির্দিষ্ট বিভাগের উল্লেখ ছাড়াই খুব সহায়ক নয়।
বেন কলিন্স

1
@ বেনকোলিনস বিভাগ 2.14.5 "স্ট্রিং লিটারালস " - ইউটিএফ -8, ইউটিএফ -16 এবং ইউটিএফ -32 এনকোডিংয়ের স্ট্রিং লিটারাল সহ স্ট্রিং লিটারালগুলি নিয়ে আলোচনা করেছে। বিভাগ 22.4.1.4 "শ্রেণীর টেম্পলেট কোডেকভেট" - অক্ষর এনকোডিংগুলির মধ্যে রূপান্তর করার জন্য ব্যবহৃত কোডেকটি ক্লাস আলোচনা করে (ইউটিএফ -8, ইউটিএফ -16 এবং ইউটিএফ -32 সহ)। নথি জুড়ে ইউনিকোড সমর্থন সম্পর্কে আরও রয়েছে, তবে এগুলি বিষয়টির সবচেয়ে গুরুত্বপূর্ণ অংশ বলে মনে হচ্ছে।
ইস্টারদা

9

আমাদের সংস্থা (এবং অন্যরা) ইউনিকোড (আইসিইউ) লাইব্রেরির জন্য ওপেন সোর্স ইন্টার্নেশন উপাদানগুলি মূলত টালিজেেন্ট দ্বারা বিকাশিত ব্যবহার করে।

এটি স্ট্রিং, লোকেল, রূপান্তর, তারিখ / সময়, কোলেশন, রূপান্তরকরণ, ইত্যাদি পরিচালনা করে। অল।

আইসিইউ ইউজারগাইড দিয়ে শুরু করুন


5

উইন্ডোজ প্রোগ্রামিংয়ের জন্য এখানে একটি চেকলিস্ট রয়েছে:

  • সমস্ত স্ট্রিং _T ("আমার স্ট্রিং") এ আবদ্ধ
  • স্ট্রেন () ইত্যাদি ফাংশন _tcslen () ইত্যাদি দ্বারা প্রতিস্থাপিত হয়েছে
  • চর * এবং কনস্টের চর * এর পরিবর্তে এলপিসিটিএসআর এলপিসিটিএসটি ব্যবহার করুন
  • দেব স্টুডিওতে নতুন প্রকল্প শুরু করার সময়, ধর্মীয়ভাবে নিশ্চিত করুন যে আপনার প্রকল্পের বৈশিষ্ট্যে ইউনিকোড বিকল্পটি নির্বাচিত হয়েছে।
  • সি ++ স্ট্রিংয়ের জন্য, std :: স্ট্রিংয়ের পরিবর্তে std :: wstring ব্যবহার করুন

11
"টি" স্ট্রিং, চর এবং ফাংশন ব্যবহার করবেন না, যদি না আপনি ইউনিকোড এবং এএনএসআই উভয়ই বিল্ডিং করার ইচ্ছা করে থাকেন। যদি আপনি কেবল ইউনিকোড তৈরির উদ্দেশ্যে থাকেন তবে কেবল নিয়মিত প্রশস্ত চরিত্রের জিনিসগুলি করুন: এল "মাই ওয়াইড স্ট্রিং" ডাব্লুসিএসএল (এল "আমার স্ট্রিং") ইত্যাদি
1800 তথ্য

সম্মত হন, আপনি যদি জেনেরিক পাঠ্যটি চান, তবে ইউনিকোড এবং এসসিআই / এমবিসিএস উভয়ের কোডের সক্ষমতা অর্জন করতে পারলেই কেবল _T ম্যাক্রো ব্যবহার করুন।

1
আপনি যদি সি ++ স্ট্রিংয়ের জন্য ইউনিকোড এবং এএনএসআই উভয়ই করতে চান তবে টাইপডেফ স্টাড :: বেসিক_স্ট্রিং <টিসিএইচআর> টি স্ট্রিংয়ের মতো কিছু ব্যবহার করুন;
সার্জ

হ্যাঁ, আমি সর্বদা #ifdef _UNICODE #define tstring std :: wstring #else #define tstring std :: স্ট্রিং # এন্ডিফ করি তবে আপনার উপায়টি ভাল সার্জ আমার পছন্দ হয়।
অ্যাডাম পিয়ার্স

4
সত্য, আমি মনে করি যে ইউটিএফ 16 একটি অপচয়, ইউটিএফ 8-এ সমস্ত এনকোডিংগুলি সহজ এবং উপায় * নিক্সের সাথে আরও সুসংগত।
chacham15

3

C ++সংবেদনশীল স্ট্রিং তুলনা দেখুন

এই প্রশ্নের ইউনিকোডে মাইক্রোসফ্ট ডকুমেন্টেশনের একটি লিঙ্ক রয়েছে: http : //msdn.mic Microsoft.com/en-us/library/cc194799.aspx

আপনি যদি নিবন্ধের পাশের এমএসডিএন-এর বাম-হাতের নেভিগেশন দিকে তাকান, আপনার ইউনিকোড ফাংশন সম্পর্কিত প্রচুর তথ্য খুঁজে পাওয়া উচিত। এটি "এনকোডিং অক্ষর" সম্পর্কিত একটি অধ্যায়ের অংশ ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )

এটিতে নিম্নলিখিত সাবসেকশন রয়েছে:

  • কোড-পৃষ্ঠা মডেল
  • উইন্ডোজে ডাবল-বাইট চরিত্রের সেটগুলি
  • ইউনিকোড
  • মিশ্র পরিবেশে সামঞ্জস্যতার সমস্যা
  • ইউনিকোড ডেটা রূপান্তর
  • উইন্ডোজ ভিত্তিক প্রোগ্রামগুলি ইউনিকোডে স্থানান্তরিত করা হচ্ছে
  • সারসংক্ষেপ

2

যদিও এটি সবার জন্য সর্বোত্তম অনুশীলন নাও হতে পারে তবে আপনি নিজের সি ++ ইউনিকোড রুটিন লিখতে পারেন!

আমি এক সপ্তাহান্তে এটি শেষ করেছি finished আমি অনেক কিছু শিখেছি, যদিও আমি এটি 100% বাগ মুক্ত করার গ্যারান্টি দিচ্ছি না, আমি অনেক পরীক্ষা করেছি এবং এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে।

আমার কোডটি নতুন বিএসডি লাইসেন্সের আওতায় রয়েছে এবং এটি এখানে পাওয়া যাবে:

http://code.google.com/p/netwidecc/downloads/list

একে ডাব্লুএসইউসিএনভি বলা হয় এবং এটি একটি নমুনা মূল () প্রোগ্রাম নিয়ে আসে যা ইউটিএফ -8, ইউটিএফ -16 এবং স্ট্যান্ডার্ড এএসসিআইআইয়ের মধ্যে রূপান্তর করে। যদি আপনি মূল কোডটি ফেলে দেন তবে আপনি ইউনিকোডে পড়ার / লেখার জন্য একটি দুর্দান্ত গ্রন্থাগার পেয়েছেন।


1

যেমন উপরে বলা হয়েছে যে একটি বৃহত সিস্টেম ব্যবহার করার সময় একটি লাইব্রেরি হ'ল সেরা বাজি। তবে কিছু সময় আপনি জিনিসগুলি নিজের হাতে পরিচালনা করতে চান না (কারণ গ্রন্থাগারটি মাইক্রো নিয়ামক হিসাবে অনেক সংস্থান ব্যবহার করতে পারে)। এই ক্ষেত্রে আপনি একটি সাধারণ লাইব্রেরি চান যা আপনার প্রয়োজনীয় জিনিসগুলির জন্য অংশগুলি অনুলিপি করতে পারেন।

উইলো শ্ল্যাঞ্জারের উদাহরণ কোডটি একটি ভাল মত মনে হচ্ছে (আরও তথ্যের জন্য তার উত্তর দেখুন)।

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

এখানে এম্বেড থাকা লাইব্রেরির একটি তালিকা রয়েছে যা শালীন বলে মনে হচ্ছে।

এম্বেড গ্রন্থাগারগুলি



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