লিনাক্স এবং উইন্ডোজ .txt ফাইলগুলির মধ্যে পার্থক্যগুলি কী (ইউনিকোড এনকোডিং)


16

আমি কেবল আসল এএনএসআই স্ট্যান্ডার্ডে সংজ্ঞায়িত 128 টি অক্ষর সেট ব্যবহার করছি।

তবে সামগ্রিকভাবে কীভাবে ফাইলগুলি পৃথকভাবে প্ররোচিত করা হয়।

আমি ডিসপ্লেতে উদ্বিগ্ন নই, অর্থাত্ যদি কোনও ট্যাব 6 বা ৮ টি অক্ষরের সাথে প্রদর্শিত হয় তবে মেমরিতে প্রকৃত অভ্যন্তরীণ উপস্থাপনা থাকে

একটি পার্থক্য যা আমি শুনেছি তা হ'ল লাইন টার্মিনেশন (লিনাক্স) এর জন্য Windows r \ n (উইন্ডোজ) বনাম \ n ব্যবহার।


আমি মনে করি বাইট অর্ডার চিহ্নটি আমার উইন্ডোজ থেকে লিনাক্সে স্থানান্তরিত আমার পিএইচপি ফাইলগুলিতে আমার #! (প্রথম লাইন) হত্যা করছে। পুরো ফাইলটি কাজ করে তবে এটি দোভাষী হিসাবে এটি করা উচিত তা খুঁজে পায় না। আমি যদি স্পষ্টতই নোটপ্যাডে এনকোডিং পদ্ধতিটি নির্বাচন করে এএনএসআইতে এনকোড করা নিশ্চিত করে নিই তবে এটি সত্য ASCII বা উইন্ডোজ অন্য কিছু করে

আপনার Gnu / লিনাক্স বাক্সে বোমা ফেলা আছে কিনা দেখুন। এটি ডেবিয়ান (এবং অন্তত কিছু অন্যান্য) এর অংশ, তবে এটি ইনস্টল করার প্রয়োজন হতে পারে। এটি প্রয়োজন কারণ মাইক্রোসফ্ট ভুলভাবে utf-8 ফাইল শুরু করার জন্য একটি বিওএম যুক্ত করে।
ctrl-alt-delor

উত্তর:


17

উইন্ডোজের "ইউনিকোড" হ'ল ইউটিএফ -16 এলই, এবং প্রতিটি অক্ষর 2 বা 4 বাইট। লিনাক্স ইউটিএফ -8 ব্যবহার করে এবং প্রতিটি অক্ষর 1 এবং 4 বাইটের মধ্যে থাকে।

"সর্বনিম্ন ন্যূনতম প্রতিটি সফ্টওয়্যার বিকাশকারী অবশ্যই, ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে ইতিবাচকভাবে অবশ্যই জানতে হবে (কোনও বাহানা নেই!)"


উইন্ডোজ একটি বাইট অপচয়?

1
আপনি যদি লাতিন -১ এর বাইরে কিছু ব্যবহার না করে থাকেন তবে হ্যাঁ।
Ignacio Vazquez-Abram

তারা আমার নিবন্ধে লিখিত আছে।
ইগনাসিও ওয়াজকেজ-আব্রামস

1
ইউটিএফ -16 এলএর জন্য অনুসন্ধান চালান তবে নিবন্ধটিতে এটি খুঁজে পেল না।

1
অধিকাংশ ক্ষেত্রে. উপস্থিত থাকলে আপনাকে বিওএমও গুনতে হবে ।
Ignacio Vazquez-Abram

11

লাইন ব্রেক

উইন্ডোজ সিআরএলএফ ( \r\n, 0D 0A) লাইন এন্ডিং ব্যবহার করে যখন ইউনিক্স কেবল এলএফ ( \n, 0A) ব্যবহার করে।

অক্ষর এনকোডিং

সর্বাধিক আধুনিক (যেমন, 2004 বা তার পর থেকে) ইউনিক্সের মতো সিস্টেমগুলি ইউটিএফ -8 কে ডিফল্ট অক্ষর এনকোডিং করে।

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

সমস্যাযুক্ত বিশেষ অক্ষর

U + 001A সাবস্টিটিউট

উইন্ডোজ (খুব কমই) ফাইল-এর শেষের অক্ষর হিসাবে Ctrl+ ব্যবহার করে Z। উদাহরণস্বরূপ, আপনি যদি typeকমান্ড প্রম্পটে কোনও ফাইল করেন তবে এটি প্রথম 1Aবাইটে কেটে যাবে ।

ইউনিক্সে, Ctrl+ Zবিশেষ কিছু নয়।

ইউ-এফএফএফ শূন্য নং-BREAK স্পেস (বাইট-অর্ডার চিহ্ন)

উইন্ডোজে, ইউটিএফ -8 ফাইলগুলি EF BB BFএএনএসআই ফাইল থেকে আলাদা করার জন্য প্রায়শই একটি "বাইট অর্ডার চিহ্ন" দিয়ে শুরু হয় ।

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


1
Ctrl-Z উইন্ডোতে ঠিক যেমন Ctrl-D (বা আপনার EOF- র সাথে যে কোনও চরিত্রের সাথে আবদ্ধ হয়েছে stty) লিনাক্সের মতো কাজ করে: কনসোল ড্রাইভারটি এটি ফাইলের শেষে অনুবাদ করে। আক্ষরিক অক্ষর ইনপুট প্রবাহে উপস্থিত হয় না; এটি কেবল পঠন ()
-কে

আমি মনে করি বাইট অর্ডার চিহ্নটি আমার উইন্ডোজ থেকে লিনাক্সে স্থানান্তরিত আমার পিএইচপি ফাইলগুলিতে আমার #! (প্রথম লাইন) হত্যা করছে। পুরো ফাইলটি কাজ করে তবে এটি দোভাষী হিসাবে এটি করা উচিত তা খুঁজে পায় না। যদি আমি স্পষ্টতই নোটপ্যাডে এনকোডিং পদ্ধতিটি নির্বাচন করে এএনএসআইতে এনকোড করা নিশ্চিত করি তবে এটি সত্য ASCII বা উইন্ডোজ অন্য কিছু করে?

1
এটি উল্লেখযোগ্য যে সিউডো টার্ম "এএনএসআই কোড পৃষ্ঠা", যদিও এখনও নোটপ্যাডের মতো প্রোগ্রামগুলিতে প্রদর্শিত হয়, এটি সম্পূর্ণরূপে একটি মিসনোমার এবং মাইক্রোসফ্ট এটি অনেক আগে স্বীকার করেছে। বিশদ জানতে en.wikedia.org/wiki/Windows_code_page দেখুন ।
ইনকিনিস মিসেসি

utf-8 এ একটি বিওএম নেই, তবে এমএস-উইন্ডোজ একটি সন্নিবেশ করে। এটি সত্য না করে তোলে 8/8। Utf-8 এর একটি নিয়ম হ'ল যে কোনও ফাইল যা ascii এ উপস্থাপিত হতে পারে তা utf-8-তে কিছুটা অভিন্ন জন্য বিট। এছাড়াও আপনি স্ট্রিমের যে কোনও সময়ে utf-8 পড়া শুরু করতে পারেন।
ctrl-alt-delor

3

একটি পার্থক্য যা আমি শুনেছি তা হ'ল লাইন ব্রেক (লিনাক্স) এর জন্য Windows r \ n (উইন্ডোজ) বনাম \ n ব্যবহার।

হ্যাঁ. বেশিরভাগ ইউনিক্স পাঠ্য সম্পাদকরা এটি স্বয়ংক্রিয়ভাবে পরিচালনা করবেন, উইন্ডোজ প্রোগ্রামার সম্পাদকরা এটি পরিচালনা করতে পারে, সাধারণ পাঠ্য সম্পাদক (বেস নোটপ্যাড) তা করবে না।

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

মনে রাখবেন যে ম্যাকোস এক্স এখন নীচে ইউএনআইএক্স, তাই এটি ইউনিক্স লাইন শেষ ব্যবহার করে। যদিও ওএস এক্সের আগে (ম্যাকোস 9 এবং নীচে) এর নিজস্ব সমাপ্তি ছিল () r)

সম্পাদনা: অন্যান্য ফর্ম্যাট সিআর এবং এলএফ:

  • \ n হ'ল ASCII 0x0A, লাইন ফিড (এলএফ)
  • r হ'ল ASCII 0x0D, ক্যারিজ রিটার্ন (সিআর)

ASCII অক্ষর সেট \ r \ n এবং \ n কোথায়? en.wikipedia.org/wiki/File:ASCII_Code_Chart.svg

2
@ ক্রিস \ n হ'ল ASCII 0x0A, লাইন ফিড। \ r ASCII 0x0D, গাড়ীর ফিরে
সমৃদ্ধ

@ রিচ ইওএফ সম্পর্কে কি? এটি কি এএনএসআই চরিত্র?

2
@ বার্লপ, টার্মিনালটি কীস্ট্রোকটিকে (এটি সাধারণত ইউনিক্স সিস্টেমে সিটিআরএল-ডি হয়) ইওএফ-তে অনুবাদ করে, যদি না এই নিয়ন্ত্রণ কীটি অক্ষম না করা হয়। অ্যাপ্লিকেশনটি আপনার আঘাত করা আসল কীটির চেয়ে একটি ইওএফ পড়বে। এটি বলতে read()গেলে, কোনও নির্দিষ্ট অক্ষরের পরিবর্তে শূন্য বাইট প্রদান করে।
psusi

1
@ বারলপ, আমি যা বলছিলাম তা: এটি কোনও চরিত্রই ফিরিয়ে দেয় না । পড়ুন () এটি আপনার বাফারে জমা হওয়া বাইটের সংখ্যা প্রদান করে। ইওএফ-তে, এটি আপনাকে শূন্য বাইট দেয়। এটিই সেই সংকেত যা আপনি ফাইলটির শেষের দিকে পৌঁছেছেন এবং পড়ার মতো আর কিছুই নেই।
psusi

1

ইউনিকোড এনকোডিংটি কী ব্যবহৃত হয় তা ওএস ভিত্তিক নয়।

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

এএনএসআই ইউনিকোড নয় এটির মধ্যে খুব সীমিত সংখ্যক চরিত্র জড়িত তাই এটি বাদ দেওয়া যাক।

তবে দেখুন নোটপ্যাডও LE, বা BE, বা UTF-8 করতে পারে

এবং নোটপ্যাড একদিকে রেখে, ইউটিএফ -8 বিওএম এর সাথে বা তার সাথে থাকতে পারে।

এবং আমি সাইগউইনের সাথে উইন্ডোজ ব্যবহার করি যদিও উইন্ডোজ পোর্টগুলি ভাল \ r \ n করতে পারে এমনকি আপনি নির্দিষ্ট করেও \ n সেড করতে দেখেছেন।

ইউনিকোড কোনও নির্দিষ্ট ওএস ব্যবহার করে কী এনকোডিং করে তার কোনও নিয়ম নেই। এটি যদি খুব নমনীয় ওএস না হত।

পার্থক্যটি দেখতে সত্যই সফ্টওয়্যারটি জানুন, সফ্টওয়্যারটির কোনও অংশ এনকোডিং কী ব্যবহার করে বা অফার করে।

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

কখনও কখনও আপনি নোটপ্যাডকে ইউনিকোড হিসাবে সংরক্ষণ করতে বলতে পারেন (যার মাধ্যমে নোটপ্যাড মানে ইউনিকোড 16 বিট সামান্য এন্ডিয়ান), এবং এটি হবে না। তবে আড়িয়াল ইউনিকোডের মতো একটি ইউনিকোড ফন্ট চয়ন করুন, এবং চরম্যাপ থেকে কিছু ইউনিকোড অক্ষরে অনুলিপি করুন এবং এটি হবে .. এবং নোটপ্যাড বা যা কিছু সফ্টওয়্যার করছে তা দেখার একটি ভাল উপায় হ'ল কোনও ফাইলের হেক্স দেখে

C:\asdf>notepad.exe a.a

C:\asdf>file a.a
a.a; Little-endian UTF-16 Unicode text, with no line terminators

C:\asdf>type a.a
aaa慡ൡ <-- though displayed aaa followed by some boxes in my cmd window
C:\asdf>

C:\asdf>xxd a.a
0000000: fffe 6100 6100 6100 6161 610d            ..a.a.a.aaa.

C:\asdf>

^^ The portion of the byte that stores the 61 is the lower value portion which with LE is stored first.

ডিডি কমান্ড (উইন্ডোজগুলির মধ্যে সাইগউইন থেকে চালানো একটি * নিক্স কমান্ড) এটি স্যুইচ করতে পারে

C:\asdf>xxd -p a.a
fffe6100610061006161610d

C:\asdf>file a.a
a.a; Little-endian UTF-16 Unicode text, with no line terminators

C:\asdf>dd if=a.a conv=swab of=a.a2
0+1 records in
0+1 records out
12 bytes (12 B) copied, 0 seconds, Infinity B/s

C:\asdf>type a.a2
a  a a aaa
C:\asdf>xxd -p a.a2
feff00610061006161610d61

C:\asdf>file a.a2
a.a2; Big-endian UTF-16 Unicode text, with no line terminators

C:\asdf>

এবং নোটপ্যাড নিজেই ইউটিএফ -16 বিগ এন্ডিয়ান বা ইউটিএফ -16 লিটল এন্ডিয়ান বা ইউটিএফ -8 হিসাবে সংরক্ষণ করতে পারে

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

আপনি যদি কোনও প্রযুক্তিগত ব্যক্তি বা এমনকি একটি নোটপ্যাড ব্যবহারকারী হন তবে আপনার ওএসের কারণে আপনি একটি এনকোডিংয়ে আবদ্ধ নন!

আমি মনে করি UTF-8 UTF-16 এর চেয়ে বেশি বুদ্ধিমান হয়ে উঠেছে, UTF-16 এমন অক্ষরগুলির জন্য এমনকি 16 টি বিট ব্যবহার করবে যেখানে কেবল 8 টি বিট প্রয়োজন। তবুও, মনে রাখবেন যে চারম্যাপটি ইউটিএফ -16 কোডটি দেখায়।

সাব্লাইম (একটি উইন্ডোজ পাঠ্য সম্পাদক) ইউনিকোডটিকে ইউটিএফ -8 হিসাবে ডিফল্টরূপে সংরক্ষণ করে।

আমি উইন্ডোজ এবং কখনও কখনও ইউনিকোড ব্যবহার করি এবং আমি বেশিরভাগই ইউটিএফ -8 ব্যবহার করি।

এবং উইন্ডোজ যেমন প্রযুক্তিগতভাবে নমনীয়, লিনাক্স অন্তত প্রযুক্তিগতভাবে নমনীয়!


আপনি কি কমান্ডগুলি লিখেছেন fileএবং typeসাইগউইন প্রম্পটের ভিতরে?
ভেসনোগ

xxdএবং typeকমান্ড মান Cygwin ইনস্টলেশন আমি অনুমান মধ্যে অনুপস্থিত। তা ছাড়াও আমি আপনার ফলাফলগুলি পুনরুত্পাদন করতে চাই।
ভেসনোগ

1
@ ভেনগ typeহ'ল সেন্টিমিডে নির্মিত একটি স্ট্যান্ডার্ড কমান্ড xxde এবং কেবল সাইগউইন সেটআপ অনুসন্ধান বাক্সে xxd টাইপ করুন এবং এটি উঠে আসে। xxd vim7 ইনস্টল করার পরে থেকে পাওয়া যায় যাতে আপনি এটি সেখান থেকেও পেতে পারেন।
বারলপ

1
@ ভেনোগ আপনি সাইগউইন কমান্ড সাইগউইনের ভিতরে বা বাইরে সাইগউইন চালাতে পারেন। যদি আপনি এগুলি সাইগউইনের বাইরে চালান তবে c:\cygwin\binআপনার পথে যোগ করুন (যদি সেখানকার সিগুইনের বিন সাব-ডিরেক্টরি)। 'টাইপ' বা 'ডির' এর মতো কোনও অভ্যন্তরীণ সিএমডি কমান্ড, বা ক্যালক.এক্সে (উইন্ডোজ ক্যালকুলেটর) এর মতো কোনও বহিরাগত এক্সি চালানো / চালানো যায় সাইগুইনের মধ্যে থেকে। সাইগউইন থেকে চালানো যায় এমন অনেক কিছুই সিএমডি থেকে বিপরীতে চালানো যেতে পারে। আপনি যদি ব্যাশ ব্যবহার করতে চান তবে সাইগউইন ব্যবহার করুন এবং আপনি যদি একক বনাম ডাবল কোট নিয়ে সমস্যা নিয়ে চলে যান তবে সাইগউইন এবং সেন্টিমিটারের মধ্যে সিএমডির মধ্যে সাইগউইন কমান্ডগুলি চালান।
বারলপ

1
@ ভেনগ এক্সএক্সডি একটি ফাইলও লিখতে পারে, উদাহরণস্বরূপ echo 61|xxd -r -p>a.aতারপর চেষ্টা করুন type a.a তাই আপনি আসলে এক্সএক্সডি-পি দিয়ে বাইট ডাম্প পেতে পারেন, বাইটগুলি পুনর্বিন্যাস বা সংশোধন করতে পারেন তারপর এটিকে এক্সএক্সডি-আর-পিতে খাওয়ান এবং একটি ভিন্ন এনকোডিং সহ একটি নতুন আলাদা ফাইল পেতে পারেন বা পুরানো ডেটা উপর ভিত্তি করে বিভিন্ন তথ্য। "ফাইল" কমান্ডটি বাইটের উপর ভিত্তি করে এনকোডিংটি বের করছে।
বারলপ

-1

লিনাক্স ইউটিএফ -8 ব্যবহার করে এবং প্রতিটি অক্ষর 1 এবং 6 বাইটের মধ্যে হয়, 1 এবং 4 বাইটের মধ্যে নয়।

U00000000 - U0000007F: 0xxxxxxx
U00000080 - U000007FF: 110xxxxx 10xxxxxx
U00000800 - U0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U00010000 - U001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U00200000 - U03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U04000000 - U7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

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