TCHAR এখনও প্রাসঙ্গিক?


87

আমি উইন্ডোজ প্রোগ্রামিংয়ে নতুন এবং পেটজোল্ড বইটি পড়ার পরে আমি অবাক হই:

এটি এখনও ব্যবহার করতে ভাল অনুশীলন TCHARধরণ এবং _T()ফাংশন স্ট্রিং ঘোষণা করার অথবা যদি আমি শুধু ব্যবহার করা উচিত wchar_tএবং L""নতুন কোডে স্ট্রিং?

আমি কেবল উইন্ডোজ 2000 এবং তারপরে লক্ষ্যবস্তু করব এবং আমার কোড শুরু থেকেই i18n হবে।

উত্তর:


15

আমি যদি আজ একটি নতুন প্রকল্প করছিলাম তবে আমি এখনও TCHAR বাক্য গঠন ব্যবহার করব। এটি এবং ডাব্লুসিএইচআর সিনট্যাক্স ব্যবহারের মধ্যে খুব বেশি ব্যবহারিক পার্থক্য নেই এবং আমি কোড পছন্দ করি যা অক্ষরের ধরণটি কী তা স্পষ্ট। যেহেতু বেশিরভাগ এপিআই ফাংশন এবং সহায়তাকারী অবজেক্টগুলি TCHAR প্রকারগুলি গ্রহণ করে / ব্যবহার করে (উদাহরণস্বরূপ: CString), এটি এটি ব্যবহার করা ঠিক বুদ্ধিমান। প্লাস এটি আপনাকে নমনীয়তা দেয় যদি আপনি কোনও পর্যায়ে কোনও ASCII অ্যাপ্লিকেশন কোড ব্যবহার করার সিদ্ধান্ত নেন বা উইন্ডোজ কখনও ইউনিকোড 32 এ বিকশিত হয় ইত্যাদি ইত্যাদি ves

আপনি যদি ডাব্লুসিএইচআর রুটে যাওয়ার সিদ্ধান্ত নিয়ে থাকেন তবে আমি এটির বিষয়ে স্পষ্ট করে বলব। অর্থাৎ, টিএসসিএআর রূপান্তর করার সময় CString এর পরিবর্তে CStringW ব্যবহার করুন এবং ম্যাক্রো castালাই করুন (যেমন: CW2CT)।

এটা আমার মতামত, যাইহোক।


প্রকৃতপক্ষে, চরিত্রের এনকোডিংটি অবশেষে '' আবার 'পরিবর্তিত হলে এটি এখনও কাজ করবে।
মেডিনোক

11
আপনি কোডটি পছন্দ করেন যা অক্ষরের ধরণটি কী তা স্পষ্ট হয় এবং এই জাতীয় টাইপটি কখনও কখনও কখনও কখনও কখনও ব্যবহৃত হয়? খুব প্ররোচিত।
উত্সাহক

4
@ ডেডুপ্লিকেটর দ্বারা উল্লিখিত অসঙ্গতির জন্য −1 এবং নেতিবাচক পেওফের পরামর্শের জন্য ম্যাক্রো যা কিছু হতে পারে তা ব্যবহার করার পরামর্শ দেয় (এবং সাধারণত একাধিক নির্দিষ্ট মানের জন্য পরীক্ষা করা হবে না)।
চিয়ার্স এবং এইচটিএইচ - আলফ

90

সংক্ষিপ্ত উত্তর: না

ইতিমধ্যে লেখা অন্য সমস্তগুলির মতো, প্রচুর প্রোগ্রামাররা এখনও টিসিএইচআর এবং সংশ্লিষ্ট ফাংশন ব্যবহার করে। আমার বিনীত মতে পুরো ধারণাটি একটি খারাপ ধারণা ছিলইউটিএফ -16 স্ট্রিং প্রসেসিং সাধারণ এএসসিআইআই / এমবিসিএস স্ট্রিং প্রসেসিংয়ের চেয়ে অনেক আলাদা। আপনি যদি উভয়ের সাথে একই অ্যালগরিদম / ফাংশন ব্যবহার করেন (এটিই টিসিএইচআর ধারণাটি ভিত্তিক!), আপনি সাধারণ স্ট্রিং কনটেন্টেশন (যেমন: কিছুটা বেশি) করছেন তবে আপনি ইউটিএফ -16 সংস্করণে খুব খারাপ পারফরম্যান্স পাবেন like পার্সিং ইত্যাদি)। মূল কারণ সারোগেটস

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


6
মজাদার ঘটনা: ইউটিএফ -16 সবসময় এনটি প্ল্যাটফর্মে থাকত না। ১৯৯ 1996 সালে ইউনিকোড ২.০ এর সাথে সারোগেট কোড পয়েন্ট চালু করা হয়েছিল, একই বছর এনটি 4 মুক্তি পেয়েছিল। আইআইআরসি, (সহ) উইন্ডোজ 2000 এর সমস্ত এনটি সংস্করণ ইউসিএস -2 ব্যবহার করে, কার্যকরভাবে ইউটিএফ -16 এর একটি উপসেট যা প্রতিটি অক্ষরকে একটি কোড পয়েন্ট (যেমন কোনও সারোগেটস) দ্বারা উপস্থাপনযোগ্য হিসাবে ধরে নিয়েছে।
0xC0000022L

4
বিটিডব্লিউ, যদিও আমি সম্মত হয়েছি যে TCHARআর ব্যবহার করা উচিত নয়, আমি একমত নই যে এটি একটি খারাপ ধারণা ছিল। আমি আরও মনে করি যে আপনি যদি ব্যবহারের পরিবর্তে TCHARসুস্পষ্ট হতে চান তবে সর্বত্র স্পষ্ট হওয়া উচিত । অর্থাৎ তাদের ঘোষণায় TCHAR/ _TCHAR(যেমন _tmain) সহ ফাংশন ব্যবহার করবেন না । সোজা কথায়: সামঞ্জস্য হতে। +1, এখনও।
0xC0000022L

4
এটি চালু হওয়ার আগে এটি একটি ভাল ধারণা ছিল, তবে এটি নতুন কোডে অপ্রাসঙ্গিক হওয়া উচিত।
অ্যাড্রিয়ান ম্যাকার্থি

4
আপনি ভুল উপস্থাপনা করছেন, TCHARপ্রাথমিকভাবে কীগুলির জন্য প্রবর্তন করা হয়েছিল: উইন 9x এবং উইন্ডোজ এনটি ভিত্তিক সংস্করণ উইন্ডোজ এনটি কোডের বিকাশ সহজ করতে। সেই সময়, উইন্ডোজ এনটি-র ইউটিএফ -16 বাস্তবায়ন ছিল ইউসিএস -2, এবং স্ট্রিং পার্সিং / ম্যানিপুলেশনের জন্য অ্যালগরিদমগুলি অভিন্ন ছিল। কোন সার্গেট ছিল না। এমনকি সারোগেটের সাথেও ডিবিসিএস (উইন্ডোজের জন্য একমাত্র সমর্থিত এমবিসিএস এনকোডিং) এবং ইউটিএফ -16 একরকম: এনকোডিংয়ে কোনও কোড পয়েন্টে এক বা দুটি কোড ইউনিট থাকে।
IInspectable

ধরুন আমি WSAGetLastError () থেকে মুদ্রণযোগ্য কিছুতে কোনও মান রূপান্তর করতে ফর্ম্যাটমেসেজ () ব্যবহার করতে চাই। WSAGetLastError () এর ডকুমেন্টেশন বলে যে এটি LPTSTR কে বাফারের পয়েন্টার হিসাবে নেয়। আমার কাছে আসলে TCHAR ব্যবহার ছাড়া খুব বেশি পছন্দ নেই, না?
এডওয়ার্ড ফালক

81

আমার সাসচায় একমত হতে হবে। TCHAR/ _T()/ ইত্যাদির অন্তর্নিহিত ভিত্তিটি হ'ল আপনি একটি "এএনএসআই" ভিত্তিক অ্যাপ্লিকেশন লিখতে পারেন এবং তারপরে যাদুতে ম্যাক্রো সংজ্ঞায়িত করে ইউনিকোড সমর্থন দিতে পারেন। তবে এটি বেশ কয়েকটি খারাপ অনুমানের উপর ভিত্তি করে:

আপনি সক্রিয়ভাবে আপনার সফ্টওয়্যারটির এমবিসিএস এবং ইউনিকোড সংস্করণ উভয়ই তৈরি করেছেন

অন্যথা, আপনি হবে আপ চিলতা এবং সাধারণ ব্যবহার char*অনেক জায়গায় স্ট্রিং।

যে আপনি অ-এএসসিআইআই ব্যাকস্ল্যাশ ব্যবহার করতে পারবেন না এটি _T ("...") লিটারেলগুলিতে পালিয়ে যায়

আপনার "এএনএসআই" এনকোডিংটি আইএসও -8859-1 না হওয়া পর্যন্ত ফলাফল char*এবং wchar_t*আক্ষরিক একই অক্ষরকে উপস্থাপন করবে না।

ইউটিএফ -16 স্ট্রিংগুলি "এএনএসআই" স্ট্রিংয়ের মতোই ব্যবহৃত হয়

তারা না. ইউনিকোড বেশ কয়েকটি ধারণার প্রবর্তন করে যা বেশিরভাগ উত্তরাধিকার চরিত্রের এনকোডিংগুলিতে নেই। সারোগেটস। সম্মিলিত অক্ষর। সাধারণীকরণ। শর্তাধীন এবং ভাষা-সংবেদনশীল কেসিং বিধি।

এবং সম্ভবত সবচেয়ে গুরুত্বপূর্ণভাবে, ইউটিএফ -16 খুব কমই ডিস্কে সংরক্ষণ করা হয় বা ইন্টারনেটে প্রেরণ করা হয়: ইউটিএফ -8 বাহ্যিক উপস্থাপনের জন্য পছন্দ করা পছন্দ করে।

আপনার অ্যাপ্লিকেশনটি ইন্টারনেট ব্যবহার করে না

(এখন, এটি আপনার সফ্টওয়্যারটির জন্য একটি বৈধ ধারণা হতে পারে , তবে ...)

ওয়েবটি ইউটিএফ -8 এবং বিরল এনকোডিংগুলির আধিক্যতে চলেTCHARধারণা মাত্র দুটি স্বীকার: "ANSI" (যা করতে পারবেন না হল UTF-8 হতে ) এবং "ইউনিকোড" ইউনিকোড (UTF-16)। এটি আপনার উইন্ডোজ এপিআই কলকে ইউনিকোড-সচেতন করার জন্য কার্যকর হতে পারে তবে আপনার ওয়েব এবং ই-মেইল অ্যাপ্লিকেশনগুলি ইউনিকোড-সচেতন করার জন্য এটি অকেজো।

আপনি কোনও মাইক্রোসফ্ট গ্রন্থাগার ব্যবহার করেন না

অন্য কেউ ব্যবহার করে না TCHARপোকো ব্যবহার করে std::stringএবং ইউটিএফ -8। এসকিউএলাইটের ইউটিএফ -8 এবং ইউটিএফ -16 এর API এর সংস্করণ রয়েছে, তবে নেই TCHARTCHARএমনকি স্ট্যান্ডার্ড লাইব্রেরিতে নেই, তাই std::tcoutআপনি নিজের এটি সংজ্ঞায়িত করতে না চাইলে না।

আমি TCHAR এর পরিবর্তে যা প্রস্তাব দিই

ভুলে যাবেন যে "এএনএসআই" এনকোডিংগুলি অস্তিত্ব রয়েছে, যখন আপনাকে এমন কোনও ফাইল পড়তে হবে যা বৈধ ইউটিএফ -8 নয়। TCHARখুব ভুলে যাও উইন্ডোজ এপিআই ফাংশনের সর্বদা "ডাব্লু" সংস্করণ কল করুন। #define _UNICODEকেবল আপনি দুর্ঘটনাক্রমে একটি "এ" ফাংশন কল করবেন না তা নিশ্চিত করার জন্য।

স্ট্রিংগুলির জন্য সর্বদা ইউটিএফ এনকোডিংগুলি ব্যবহার করুন: স্ট্রিংয়ের জন্য ইউটিএফ -8 এবং charস্ট্রিংয়ের জন্য ইউটিএফ -16 (উইন্ডোজে) বা ইউটিএফ -32 (ইউনিক্সের মতো সিস্টেমে) wchar_ttypedef UTF16এবং UTF32চরিত্র ধরনের প্ল্যাটফর্ম পার্থক্য এড়ানো।


6
২০১২ কলিং: এখনও না করে এখনও অ্যাপ্লিকেশনগুলি বজায় রাখা দরকার #define _UNICODE। সঞ্চালনের সমাপ্তি :)
0xC0000022L

12
@ 0xC0000022L প্রশ্নটি নতুন কোড সম্পর্কে ছিল । আপনি যখন পুরানো কোড বজায় রাখবেন তখন অবশ্যই আপনার সেই পরিবেশের সাথে কাজ করতে হবে যে কোডটির জন্য লেখা আছে। আপনি যদি কোনও সিওবিএল অ্যাপ্লিকেশন বজায় রাখছেন তবে কোবোল একটি ভাল ভাষা কিনা তা বিবেচনাধীন নয়, আপনি এটির সাথে আটকে রয়েছেন। এবং যদি আপনি কোনও অ্যাপ্লিকেশন বজায় রাখছেন যা টিসিএইচএআরের উপর নির্ভর করে তবে এটি কোনও ভাল সিদ্ধান্ত নয় বা না তা বিবেচ্য নয়, আপনি এটির সাথে আটকে রয়েছেন।
জলফ

4
প্রকৃতপক্ষে, কোচবিএল না হলে টিসিএইচএআর কার্যকর নয়)
পাভেল রদজিভিলভস্কি

4
_UNICODEকীভাবে জেনেরিক-পাঠ্য ম্যাপিংগুলি সিআরটি-তে সমাধান করা হয় তা নিয়ন্ত্রণ করে। আপনি যদি উইন্ডোজ এপিআইয়ের এএনএসআই সংস্করণটি কল করতে না চান তবে আপনাকে সংজ্ঞায়িত করতে হবে UNICODE
IInspectable

18

যদি আপনি এখনও ভাবছেন যে এটি এখনও অনুশীলন করে চলেছে, তবে হ্যাঁ - এটি এখনও কিছুটা ব্যবহৃত হয়। আপনার কোডটি টিএইচএআর এবং _T ("") ব্যবহার করে কেউ মজাদার দিকে নজর দেবে না। আমি এখন যে প্রকল্পটি নিয়ে কাজ করছি তা এএনএসআই থেকে ইউনিকোডে রূপান্তরিত হচ্ছে - এবং আমরা বহনযোগ্য (টিসিএইচআর) রুটে যাচ্ছি।

যাহোক...

আমার ভোটটি সমস্ত এএনএসআই / ইউনিকোডে পোর্টেবল ম্যাক্রোগুলি (টিসিএইচআর, টিটি (""), এবং সমস্ত _টিএক্সএক্সএক্সএক্সএক্সএক্স কল, ইত্যাদি ...) ভুলে যাওয়া এবং সর্বত্র ইউনিকোড ধরে নেওয়া উচিত। আপনার কোনও এএনএসআই সংস্করণ কখনই লাগবে না বলে আমি সত্যিই পোর্টেবল হওয়ার বিন্দুটি দেখতে পাই না। আমি সমস্ত প্রশস্ত চরিত্রের ফাংশন এবং প্রকারগুলি সরাসরি ব্যবহার করব। সমস্ত স্ট্রিং আক্ষরিককে একটি এল দিয়ে প্রিফারেন্ড করুন


4
আপনি এমন কোনও কোড লিখতে পারেন যেখানে আপনি অন্য কোথাও ব্যবহার করতে চান যেখানে আপনার এএনএসআই সংস্করণ প্রয়োজন, বা (যেমন নিক বলেছেন) উইন্ডোজ ডিসিএআর বা অন্য যে কোনও জায়গায় চলে যেতে পারে, তাই আমি এখনও মনে করি যে টিসিএআরএর পরিবর্তে এটির পরিবর্তে যাওয়া খুব ভাল ধারণা think ডাব্লুসিএইচআর।
আরকে

আমি সন্দেহ করি যে উইন্ডোজ কখনও ইউটিএফ -32 এ স্যুইচ করবে।
dan04

7
ইউটিএফ -16 সুপারিশের জন্য -1। এটি কেবল নন-পোর্টেবল (উইন্ডোজ কেন্দ্রিক) কোড তৈরি করে, যা গ্রন্থাগারগুলির জন্য অগ্রহণযোগ্য - যদিও ইউআই কোডের মতো সহজতম ক্ষেত্রে ব্যবহার করা যেতে পারে - এটি উইন্ডোতেও কার্যকর নয়। utf8everywhere.org
পাভেল রাদজিভিলভস্কি

11

ভূমিকা Windows- এ প্রোগ্রামিং নিবন্ধ দুটিই MSDN বলে

নতুন অ্যাপ্লিকেশনগুলির সর্বদা ইউনিকোড সংস্করণ (এপিআই এর) কল করা উচিত।

টেক্সট এবং TCHAR ম্যাক্রো কারণ সব অ্যাপ্লিকেশন ইউনিকোড ব্যবহার করা উচিত কম দরকারী আজ, আছে।

আমি বিদ্ধ হবে wchar_tএবং L""


4
স্টিভেন, আপনি এমন কোনও ব্যক্তির লেখা একটি পাঠ্য উদ্ধৃত করছেন যা 'ইউনিকোড' শব্দের অর্থ বুঝতে পারে না। এটি ইউসিএস -২ বিভ্রান্তির সময়কালের দুর্ভাগ্যজনক নথিগুলির মধ্যে একটি।
পাভেল রদজিভিলভস্কি

4
@ পাভেলর্যাডজিভিলোভস্কি: নথিটি এমন একটি ব্যবস্থার জন্য রচিত হয়েছিল, যেখানে ইউনিকোড এবং ইউটিএফ -16 এলই সাধারণত আন্তঃ বিনিময়যোগ্যভাবে ব্যবহৃত হয়। প্রযুক্তিগতভাবে ভুল হলেও এটি তাত্পর্যপূর্ণ নয়। একই পাঠ্য প্রবর্তনের ক্ষেত্রে এটিও স্পষ্টভাবে উল্লেখ করা হয়েছে: "উইন্ডোজ ইউটিএফ -16 এনকোডিং ব্যবহার করে ইউনিকোড অক্ষর উপস্থাপন করে [...]"
IInspectable

11

আমি আলাদা পদ্ধতির পরামর্শ দিতে চাই (দুজনের কোনওটিই নয়)।

সংক্ষিপ্তসার হিসাবে, ইউটিএফ -8 এনকোডিং ধরে ধরে চর * এবং এসডিডি :: স্ট্রিংটি ব্যবহার করুন এবং এপিআই ফাংশন মোড়ানোর সময় কেবল ইউটিএফ -16 এ রূপান্তরগুলি করুন।

উইন্ডোজ প্রোগ্রামগুলিতে এই পদ্ধতির জন্য আরও তথ্য এবং ন্যায়সঙ্গততা http://www.utf8everywhere.org এ পাওয়া যাবে ।


@ পাভেলর্যাডজিভিলভস্কি, আপনার পরামর্শটি যখন উপাচার্য ++ অ্যাপ্লিকেশনটিতে প্রয়োগ করবেন, তখন আমরা কি ভিসি ++ চর্যাচটার সেট 'নন' বা 'মাল্টিবাইট (এমবিসিএস)' সেট করব? আমি জিজ্ঞাসার কারণটি হ'ল আমি সবেমাত্র বুস্ট :: লোকালে ইনস্টল করেছি এবং ডিফল্ট অক্ষর সেটটি ছিল এমবিসিএস। এফডব্লিউআইডাব্লু, আমার খাঁটি এএসসিআইআই অ্যাপ্লিকেশনটি 'নন' তে সেট করা হয়েছিল এবং আমি এখন এটি 'এমবিসিএস' তে সেট করেছি (যেহেতু আমি এতে বুস্ট :: স্থানীয় ব্যবহার করব) এবং এটি ঠিক কাজ করে works দয়া করে উপদেশ দাও.
ক্যারোলিন বেল্ট্রান

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

4
হল UTF-8 সর্বত্র মন্ত্রোচ্চারণের অধিকার সমাধান নয় হয়ে যাবে, শুধু কারণ এটির আরও বেশি প্রায়ই পুনরাবৃত্তি করা হয়। ইউটিএফ -8 নিঃসন্দেহে সিরিয়ালাইজেশনের জন্য আকর্ষণীয় এনকোডিং (যেমন ফাইল, বা নেটওয়ার্ক সকেট), তবে উইন্ডোজটিতে স্থানীয় ইউটিএফ -16 এনকোডিংটি অভ্যন্তরীণভাবে ব্যবহার করে চরিত্রের ডেটা সংরক্ষণ করা এবং অ্যাপ্লিকেশন সীমানায় রূপান্তর করা উইন্ডোজটিতে প্রায়শই বেশি উপযুক্ত। একটি কারণ হ'ল, ইউটিএফ -16 হ'ল একমাত্র এনকোডিং, যা অবিলম্বে অন্য কোনও সমর্থিত এনকোডিংয়ে রূপান্তরিত হতে পারে। ইউটিএফ -8 এর ক্ষেত্রে এটি হয় না।
IInspectable

"..UTF-16 হ'ল একমাত্র এনকোডিং, তা অবিলম্বে অন্য কোনও সমর্থিত এনকোডিংয়ে রূপান্তরিত হতে পারে" " আপনি কি বোঝাতে চেয়েছেন? ইউটিএফ -8 এনকোডিংকে অন্য কোনও কিছুতে রূপান্তর করতে সমস্যা কি?
পাভেল রদজিভিলভস্কি

4
আমি বুঝতে পারছি না. অন্য কিছুর কাছে - কিসের মতো? যেমন ইউসিএস -4? কেন না? খুব সহজে মনে হচ্ছে, সমস্ত সংখ্যার অ্যালগোরিদম ..
পাভেল রদজিভিলভস্কি

7

TCHAR/ WCHARকিছু উত্তরাধিকার প্রকল্পের জন্য যথেষ্ট হতে পারে। কিন্তু নতুন অ্যাপ্লিকেশনের জন্য, আমি বলতে হবে কোন

এই সমস্ত TCHAR/ WCHARস্টাফ historicalতিহাসিক কারণে আছে। TCHARএএনএসআই পাঠ্য এনকোডিং (এমবিসিএস) এবং ইউনিকোড পাঠ্য এনকোডিং (ইউটিএফ -16) এর মধ্যে স্যুইচ করার জন্য একটি পরিষ্কার পরিচ্ছন্ন উপায় (ছদ্মবেশ) সরবরাহ করে। অতীতে, বিশ্বের সমস্ত ভাষার বর্ণের সংখ্যা সম্পর্কে মানুষের বোঝাপড়া ছিল না। তারা ধরে নিয়েছে যে সমস্ত বাইটগুলি উপস্থাপন করার জন্য 2 বাইট যথেষ্ট ছিল এবং এটি ব্যবহার করে একটি নির্দিষ্ট দৈর্ঘ্যের অক্ষর এনকোডিং স্কিম রয়েছে WCHAR। যাইহোক, এই আর সত্য মধ্যে ইউনিকোড 2.0 মুক্তির পর 1996

এটি বলার জন্য: আপনি CHAR/ WCHAR/ যে কোনও ক্ষেত্রেই ব্যবহার করেন না কেন TCHAR, আপনার প্রোগ্রামের পাঠ্য প্রক্রিয়াকরণ অংশটি আন্তর্জাতিকীকরণের জন্য পরিবর্তনশীল দৈর্ঘ্যের অক্ষরগুলি পরিচালনা করতে সক্ষম হওয়া উচিত ।

সুতরাং আপনার উইন্ডোজ প্রোগ্রামিংয়ের জন্য CHAR/ WCHAR/ থেকে একটি বেছে নেওয়ার চেয়ে আরও বেশি কিছু করা দরকার TCHAR:

  1. যদি আপনার অ্যাপ্লিকেশনটি ছোট হয় এবং পাঠ্য প্রক্রিয়াজাতকরণের সাথে জড়িত না থাকে (উদাহরণস্বরূপ কেবল পাঠ্য স্ট্রিংটিকে আর্গুমেন্ট হিসাবে প্রেরণ করা হয়), তবে আটকে দিন WCHAR। যেহেতু ইউনিকোড সমর্থন সহ WinAPI এর সাথে কাজ করা সহজ it
  2. অন্যথায়, আমি ইউটিএফ -8 অভ্যন্তরীণ এনকোডিং এবং চর স্ট্রিং বা স্টাডি :: স্ট্রিংয়ে পাঠ্যগুলি সঞ্চয় হিসাবে ব্যবহার করার পরামর্শ দেব। এবং উইনাপি কল করার সময় তাদের ইউটিএফ -16 এ আচ্ছাদন করুন। ইউটিএফ -8 এখন প্রভাবশালী এনকোডিং এবং ইউটিএফ -8 স্ট্রিংগুলি প্রক্রিয়া করার জন্য প্রচুর হ্যান্ডেল লাইব্রেরি এবং সরঞ্জাম রয়েছে।

আরও গভীরতার সাথে পড়ার জন্য এই দুর্দান্ত ওয়েবসাইটটি দেখুন: http://utf8everywhere.org/


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

4

হ্যাঁ একেবারে; কমপক্ষে _T ম্যাক্রোর জন্য। যদিও আমি প্রশস্ত-চরিত্রের জিনিসগুলি সম্পর্কে এতটা নিশ্চিত নই।

কারণ হ'ল উইনসিইসি বা অন্যান্য অ-মানক উইন্ডোজ প্ল্যাটফর্মগুলিকে আরও ভালভাবে সমর্থন করা। যদি আপনি 100% নিশ্চিত হন যে আপনার কোডটি এনটিতে থাকবে, তবে আপনি সম্ভবত নিয়মিত সি-স্ট্রিং ডিক্লারেশন ব্যবহার করতে পারেন। তবে, আরও নমনীয় পদ্ধতির দিকে ঝোঁক দেওয়া ভাল কারণ ম্যাস্রোটি একটি নন-উইন্ডোজ প্ল্যাটফর্মের সাথে তুলনামূলকভাবে হাজারো কোডের লাইনের মধ্য দিয়ে যেতে এবং কোনও লাইব্রেরি পোর্ট করার প্রয়োজনে এটি সর্বত্র যুক্ত করার তুলনায় # ম্যাক্রোটিকে নির্ধারণ করা খুব সহজ as উইন্ডোজ মোবাইল।


4
উইনসিইসি উইন 32 এর মতো 16 বিট wchar_t স্ট্রিং ব্যবহার করে। আমাদের কাছে কোডের একটি বৃহত বেস রয়েছে যা WinCE এবং Win32 এ চলে এবং আমরা কখনও TCHAR ব্যবহার করি না।
mhenry1384

2

আইএমএইচও, যদি আপনার কোডটিতে TCHARs থাকে তবে আপনি বিমূর্তির ভুল স্তরে কাজ করছেন।

ব্যবহারের যাই হোক না কেন স্ট্রিং টাইপ আপনার জন্য সবচেয়ে সুবিধাজনক যখন টেক্সট প্রক্রিয়াকরণ সঙ্গে তার আচরণ - এই আশা কিছু ইউনিকোড সমর্থন থাকবে, কিন্তু আপনি উপরে নির্ভর করে। প্রয়োজনীয় হিসাবে ওএস এপিআই সীমানায় রূপান্তর করুন।

ফাইল পাথগুলির সাথে কাজ করার সময়, স্ট্রিংগুলি ব্যবহার করার পরিবর্তে আপনার নিজস্ব কাস্টম প্রকারটি হুইপ করুন। এটি আপনাকে ওএস-স্বতন্ত্র পাথ বিভাজকগুলিকে মঞ্জুরি দেয়, ম্যানুয়াল স্ট্রিং কনটেনটেশন এবং বিভাজনের চেয়ে কোডের বিরুদ্ধে কোডের জন্য আপনাকে একটি সহজ ইন্টারফেস দেয় এবং বিভিন্ন ওএসের সাথে মানিয়ে নেওয়া অনেক সহজ হবে (আনসি, ইউসিএস -২, ইউটিএফ -৮, যাই হোক না কেন) ।


ইউনিকোডে কমপক্ষে তিনটি বর্তমান এনকোডিং রয়েছে (ইউটিএফ -8, ইউটিএফ -16, ইউটিএফ -32) এবং একটি অবহিত এনকোডিং (ইউসিএস -2, এখন ইউটিএফ -16 কীসের একটি উপসেট)। আপনি কোনটি উল্লেখ করেন? আমি বাকি পরামর্শগুলি পছন্দ করি তবে +1
0xC0000022L

2

সুস্পষ্ট ডাব্লুসিএইচআর ব্যতীত অন্য যে কোনও কিছুই আমি দেখতে পাচ্ছি তার কারণগুলি হ'ল বহনযোগ্যতা এবং দক্ষতা।

আপনি যদি নিজের চূড়ান্ত নির্বাহযোগ্যকে যতটা সম্ভব ব্যবহারের চরটি তৈরি করতে চান।

আপনি যদি র‌্যাম ব্যবহারের বিষয়ে চিন্তা না করেন এবং আন্তর্জাতিকীকরণটি সহজ অনুবাদ হিসাবে সহজ হতে চান তবে ডাব্লুসিএইচএআর ব্যবহার করুন।

আপনি যদি আপনার কোডটি নমনীয় করতে চান তবে TCHAR ব্যবহার করুন।

যদি আপনি কেবল লাতিন অক্ষরগুলি ব্যবহার করার পরিকল্পনা করে থাকেন তবে আপনি সম্ভবত ASCII / MBCS স্ট্রিং ব্যবহার করতে পারেন যাতে আপনার ব্যবহারকারীর যতটা র‌্যামের প্রয়োজন না হয়।

"শুরু থেকে i18n" লোকের জন্য, নিজেকে উত্স কোডের স্থানটি সংরক্ষণ করুন এবং ইউনিকোডের সমস্ত ফাংশন কেবল ব্যবহার করুন।


-1

শুধু একটি পুরানো প্রশ্ন যুক্ত:

না

VS2010 এ একটি নতুন সিএলআর সি ++ প্রকল্প শুরু করুন। মাইক্রোসফ্ট নিজেরাই ব্যবহার করে L"Hello World", 'নফ বলেছিলেন।


13
সিএলআর পরিচালনা ব্যবস্থাবিহীন কোডের চেয়ে খুব আলাদা পরিবেশ। যে না একটি আর্গুমেন্ট।
কোডি গ্রে

4
এমনকি মাইক্রোসফ্ট ভুল করে।
পাভেল রদজিভিলভস্কি

6
-1 প্রশ্ন ট্যাগ Cএবং C++। উত্তরগুলি সর্বদা তাদের নিজ নিজ লেখক দ্বারা মুছতে পারে। এই বিধানটি ব্যবহার করার জন্য এটি ভাল সময় হবে।
IInspectable

-1

TCHARথেকে পোর্ট করার জন্য একটি নতুন অর্থ আছে WCHARকরার CHAR

https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/use-utf8-code-page

উইন্ডোজ 10 এর সাম্প্রতিক প্রকাশগুলি এএনএসআই কোড পৃষ্ঠা এবং অ্যাপ্লিকেশনগুলিতে ইউটিএফ -8 সমর্থন প্রবর্তনের মাধ্যম হিসাবে -A এপিআইগুলি ব্যবহার করেছে। যদি এএনএসআই কোড পৃষ্ঠাটি ইউটিএফ -8-এর জন্য কনফিগার করা থাকে, -এআইপিআইগুলি ইউটিএফ -8 এ পরিচালনা করে।

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