"এলসি_এলএল = সি" কী করে?


324

ইউনিক্সের মতো সিস্টেমে Cমানটির জন্য কী করবে LC_ALL?

আমি জানি যে এটি সমস্ত দিকের জন্য একই লোকেলকে বাধ্য করে কিন্তু কী করে C?


আপনি যদি xclockসতর্কবাণী ( Missing charsets in String to FontSet conversion) দিয়ে কোনও সমস্যার সমাধান করতে চান তবে LC_ALL=C.UTF-8সিরিলিকের সমস্যা এড়াতে আপনি যদি এটি ব্যবহার করেন তবে ভাল । এই পরিবেশের পরিবর্তনশীলটি সেট করতে আপনাকে অবশ্যই ~/.bashrcফাইলের শেষে নিম্নলিখিত লাইনটি যুক্ত করতে হবে -export LC_ALL=C.UTF-8
ফেডটসোল্ডার

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

হ্যাঁ, আপনি ঠিক বলেছেন, ঠিক আছে
19-22

উত্তর:


209

এটি আউটপুটটির জন্য অ্যাপ্লিকেশনগুলিকে ডিফল্ট ভাষা ব্যবহার করতে বাধ্য করে:

$ LC_ALL=es_ES man
¿Qué página de manual desea?

$ LC_ALL=C man
What manual page do you want?

এবং বাহ্য অনুসারে বাছাই করার বাহিনী:

$ LC_ALL=en_US sort <<< $'a\nb\nA\nB'
a
A
b
B

$ LC_ALL=C sort <<< $'a\nb\nA\nB'
A
B
a
b

20
ভাল উদাহরণের জন্য +1, তবে স্টিফেনের উত্তরে থাকা গুরুত্বপূর্ণ তথ্যের অভাব রয়েছে ...
অলিভিয়ার ডুলাক

4
ডিফল্ট ভাষা বলতে কী বোঝ ?
স্টাফেন চেজেলাস

2
হ্যাঁ, আমি বুঝতে পেরেছি যে লেখক তার পছন্দ মতো যা করতে পারে তা টিনে যা বলে তা না করে can ব্যাপারটা হলো. ইউএস ইংলিশ হ'ল একমাত্র ভাষা যা এলসি_এলএল = সি-তে অক্ষর দ্বারা সঠিকভাবে উপস্থাপিত হতে পারে, একমাত্র ভাষা যেখানে LC_ALL = C (LC_COLLATE) এ বাছাইয়ের অর্থে বোঝা যায়, LC_ALL = C (LC_TIME) এর ইংরেজি মাস এবং দিনের নাম থাকে। এলসি_এলএল = সি অন্য ভাষাতে এলসি_এলএল = এন ভাষা = এন এর থেকে পৃথক কোনও বার্তায় ফিরে এসেছি এমন অ্যাপ্লিকেশন আমি কখনও দেখিনি। তাহলে আমি কি কোনও প্রোগ্রামের বিরুদ্ধে বাগ রিপোর্ট করার অধিকারী যদি তা না হয়? (এখানে ইংরেজিতে অনূদিত অ্যাপ্লিকেশনগুলির বিষয়ে কথা বলছেন না)।
স্টাফেন চেজেলাস

2
সমস্যাটি হ'ল "ইউএস ইংলিশ হ'ল একমাত্র ভাষা যা এলসি_এলএল = সিতে চারসেটের সাহায্যে সঠিকভাবে উপস্থাপন করা যায়"। সংকীর্ণ অক্ষরগুলি ব্যবহার করার সময় এটি কেবলমাত্র সি / সি ++ প্রোগ্রামগুলিতে সত্য হয় তবে তারপরেও ব্যতিক্রম রয়েছে (যেহেতু বেশ কয়েকটি ভাষা কেবল অক্ষর এবং চিহ্নগুলি ASCII তে ব্যবহার করে)। ডিফল্ট ভাষা ইংরাজী না থাকাকালীন একটি বাগ রিপোর্ট করা আপনার মনে হবে ... ধর্মান্ধ।
Ignacio Vazquez-Abram

3
দ্রষ্টব্য যে ইংরেজিতে (যার অর্থ LANG = en_US.utf8) বার্তাটি (এবং হওয়া উচিত) ইউনিকোড অক্ষর যেমন "" স্ট্রিংয়ের উদ্ধৃতি হিসাবে ব্যবহার করতে পারে। যদিও ল্যাং = সি-তে, এটিতে কেবল এসসিআইআই রয়েছে (ডাবল কোটস, ব্যাককোটিস এবং অ্যাডোস্ট্রোফস)।
gelঞ্জেল

332

LC_ALLহ'ল পরিবেশ পরিবর্তনশীল যা অন্য সমস্ত স্থানীয়করণ সেটিংসকে ওভাররাইড করে ( কিছু পরিস্থিতিতে বাদে$LANGUAGE )।

স্থানীয়করণের বিভিন্ন দিক (যেমন হাজার বিভাজক বা দশমিক পয়েন্ট চরিত্র, অক্ষর সেট, বাছাই ক্রম, মাস, দিনের নাম, ভাষা বা অ্যাপ্লিকেশন বার্তাগুলির মতো ত্রুটি বার্তা, মুদ্রার প্রতীক) কয়েকটি পরিবেশের ভেরিয়েবল ব্যবহার করে সেট করা যেতে পারে।

আপনি সাধারণত $LANGআপনার পছন্দটিকে এমন একটি মান দিয়ে সেট করবেন যা আপনার অঞ্চলটিকে চিহ্নিত করে (যেমন fr_CH.UTF-8আপনি যদি ফ্রেঞ্চ ভাষায় সুইজারল্যান্ডে থাকেন, ইউটিএফ -8 ব্যবহার করে)। পৃথক LC_xxxভেরিয়েবলগুলি একটি নির্দিষ্ট দিককে ওভাররাইড করে। LC_ALLতাদের সকলকে ওভাররাইড করে। localeকমান্ড, যখন যুক্তি ছাড়া নামক বর্তমান সেটিংস একটি সারসংক্ষেপ দেয়।

উদাহরণস্বরূপ, একটি জিএনইউ সিস্টেমে, আমি পাই:

$ locale
LANG=en_GB.UTF-8
LANGUAGE=
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

উদাহরণস্বরূপ আমি একটি পৃথক সেটিংস ওভাররাইড করতে পারি:

$ LC_TIME=fr_FR.UTF-8 date
jeudi 22 août 2013, 10:41:30 (UTC+0100)

বা:

$ LC_MONETARY=fr_FR.UTF-8 locale currency_symbol
€

বা এলসি_এলএল দিয়ে সমস্ত কিছু ওভাররাইড করুন।

$ LC_ALL=C LANG=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8 cat /
cat: /: Is a directory

কোনও স্ক্রিপ্টে, আপনি যদি কোনও নির্দিষ্ট সেটিংটি জোর করতে চান, কারণ ব্যবহারকারীরা কী সেটিংস (সম্ভবত এলসি_এলএলও জোর করে) জোর করে তা জানেন না, আপনার সেরা, নিরাপদ এবং সাধারণভাবে কেবল বিকল্পটি এলসি_এলএলকে বাধ্য করা।

Cলোকেল একটি বিশেষ লোকেল যে সহজ লোকেল হতে বোঝানো হয়। আপনি আরও বলতে পারেন যে অন্যান্য লোকেলগুলি মানুষের জন্য, সি লোকেল কম্পিউটারের জন্য। সি লোকেলে, অক্ষরগুলি একক বাইট হয়, চরসেটটি ASCII হয় (ভাল, এটি প্রয়োজন হয় না তবে বাস্তবে আমাদের বেশিরভাগ সিস্টেমে ব্যবহার করতে হবে), বাছাই ক্রমটি বাইট মানগুলির উপর ভিত্তি করে, ভাষাটি সাধারণত মার্কিন ইংরেজী হয় (যদিও অ্যাপ্লিকেশন বার্তাগুলির জন্য (যেমন মাস বা দিনের নাম বা সিস্টেম লাইব্রেরি দ্বারা বার্তাগুলির বিপরীতে) এটি অ্যাপ্লিকেশন লেখকের বিবেচনার ভিত্তিতে) এবং মুদ্রার চিহ্নগুলির মতো জিনিসগুলি সংজ্ঞায়িত হয় না।

কিছু সিস্টেমে, পসিক্স লোকেলের সাথে পার্থক্য রয়েছে যেখানে উদাহরণস্বরূপ অ-এসসিআইআই অক্ষরগুলির জন্য বাছাই করার ক্রম সংজ্ঞায়িত করা হয়নি।

আপনার স্ক্রিপ্টে হস্তক্ষেপের জন্য ব্যবহারকারীর সেটিংস এড়াতে আপনি সাধারণত LC_ALL = C দিয়ে একটি কমান্ড চালান। উদাহরণস্বরূপ, যদি আপনি চান তাহলে [a-z]থেকে 26 ASCII অক্ষর মেলে aকরার z, আপনি সেট করতে LC_ALL=C

জিএনইউ সিস্টেমে LC_ALL=Cএবং LC_ALL=POSIX(বা LC_MESSAGES=C|POSIX) ওভাররাইড করা হবে $LANGUAGE, যখন LC_ALL=anything-elseনা।

কয়েকটি ক্ষেত্রে যেখানে আপনার সাধারণত সেট করতে হয় LC_ALL=C:

  • sort -uবা sort ... | uniq...। সি ছাড়া অন্য অনেক লোকেলগুলিতে কিছু সিস্টেমে (উল্লেখযোগ্যভাবে জিএনইউ বেশী) কিছু অক্ষরের বাছাই ক্রম একই থাকেsort -uঅনন্য লাইনগুলি প্রতিবেদন করে না, তবে প্রতিটি গ্রুপের লাইনের একটির মধ্যে সমান সাজানোর ক্রম রয়েছে। সুতরাং আপনি যদি অনন্য লাইন চান, আপনার একটি লোকেল প্রয়োজন যেখানে অক্ষরগুলি বাইট হয় এবং সমস্ত অক্ষরের বিভিন্ন বাছাই করার ক্রম থাকে (যা Cলোকেলের গ্যারান্টি দেয়)।
  • একই ক্ষেত্রে প্রযোজ্য =এর অপারেটর POSIX অনুবর্তী exprবা ==POSIX অনুবর্তী এর অপারেটর awkগুলি ( mawkএবং gawkযে বিষয়ে POSIX হয় না), যে চেক করবেন না কিনা দুটি স্ট্রিং অভিন্ন কিন্তু কিনা তারা একই সাজাতে।
  • এর মতো চরিত্রের ব্যাপ্তি grep। যদি আপনি ব্যবহারকারীর ভাষায় কোনও বর্ণের সাথে মেলে বোঝাতে চান তবে ব্যবহার করুন grep '[[:alpha:]]'এবং সংশোধন করবেন না LC_ALL। তবে আপনি যদি a-zA-ZASCII অক্ষরগুলির সাথে মিল রাখতে চান তবে আপনার প্রয়োজন হয় দুটি LC_ALL=C grep '[[:alpha:]]'বা LC_ALL=C grep '[a-zA-Z]'¹ ¹ [a-z]এর aআগে এবং তার আগে বাছাই করা অক্ষরগুলির সাথে মেলে z(যদিও অনেকগুলি এপিআই এর সাথে এটি এর চেয়ে জটিল)। অন্যান্য লোকালে, আপনি সাধারণত জানেন না যে সেগুলি কী। উদাহরণস্বরূপ কিছু স্থানীয় লোকগুলি [a-z]এপিআই-এর মতো কিছু এপিআইগুলিতে বাছাইয়ের ক্ষেত্রে কেসকে অগ্রাহ্য bashকরে [B-Z]বা এতে অন্তর্ভুক্ত থাকতে পারে [A-Y]। অনেক হল UTF-8 লোকেলে (তত্সহ en_US.UTF-8সবচেয়ে সিস্টেমে), [a-z]ল্যাটিন অক্ষর অন্তর্ভুক্ত করা হবে aথেকে yডায়াক্রিটিক সহ কিন্তু না যারা z(যেহেতুzতাদের আগে ধরণের) যা আমি কল্পনা করতে পারি না আপনি যা চান তা হবে (কেন আপনি অন্তর্ভুক্ত করতে চান éএবং না źকেন?)।
  • ভাসমান পয়েন্ট গণিত মধ্যে ksh93ksh93ভিতরে decimal_pointসেটিং সম্মান LC_NUMERIC। আপনি যদি কোনও স্ক্রিপ্ট লিখে থাকেন তবে a=$((1.2/7))এটি কোনও ব্যবহারকারী দ্বারা চালিত হলে কাজ করা বন্ধ করবে যার লোকালে দশমিক বিভাজক হিসাবে কমা রয়েছে:

    $ ksh93 -c 'echo $((1.1/2))'
    0.55
    $ LANG=fr_FR.UTF-8  ksh93 -c 'echo $((1.1/2))'
    ksh93: 1.1/2: arithmetic syntax error
    

    তারপরে আপনার এমন জিনিসগুলির দরকার:

    #! /bin/ksh93 -
    float input="$1" # get it as input from the user in his locale
    float output
    arith() { typeset LC_ALL=C; (($@)); }
    arith output=input/1.2 # use the dot here as it will be interpreted
                           # under LC_ALL=C
    echo "$output" # output in the user's locale
    

    পার্শ্ব দ্রষ্টব্য হিসাবে: ,দশমিক বিভাজক ,গাণিতিক অপারেটরের সাথে দ্বন্দ্ব যা আরও বিভ্রান্তির কারণ হতে পারে।

  • বাইট হওয়ার জন্য আপনার যখন অক্ষর প্রয়োজন। আজকাল, বেশিরভাগ লোকালগুলি ইউটিএফ -8 ভিত্তিক, যার অর্থ অক্ষরগুলি 1 থেকে 6 বাইট পর্যন্ত নিতে পারে। টেক্সট ইউটিলিটিগুলির সাথে বাইট বলতে বোঝানো ডেটা নিয়ে কাজ করার সময়, আপনি এলসি_এলএল = সি সেট করতে চান। এটি কর্মক্ষমতাও উল্লেখযোগ্যভাবে উন্নতি করবে কারণ ইউটিএফ -8 ডেটা পার্স করার একটি ব্যয় হয়।
  • পূর্ববর্তী পয়েন্টটির একটি তাত্পর্য: পাঠ্য প্রক্রিয়া করার সময় যেখানে আপনি জানেন না কী অক্ষর সেট করে ইনপুটটি কী লেখা আছে, তবে ধরে নিতে পারেন এটি ASCII এর সাথে সামঞ্জস্যপূর্ণ (কার্যত সমস্ত অক্ষর যেমন রয়েছে)। উদাহরণস্বরূপ grep '<.*>', একটি যুক্ত লাইনগুলি সন্ধান করার জন্য <, >আপনি কোনও ইউটিএফ -8 লোকালে রয়েছেন এবং ইনপুটটি আইসো 8859-15 এর মতো একক-বাইট 8-বিট অক্ষর সেট করে এনকোড করা থাকলে কোনও কাজ করবে না। কারণ .কেবলমাত্র অক্ষরগুলির সাথে মেলে এবং iso8859-15-এ অ-এসসিআইআই অক্ষরগুলি ইউটিএফ -8 এ বৈধ অক্ষর তৈরি না করার সম্ভাবনা রয়েছে। অন্যদিকে, LC_ALL=C grep '<.*>'কাজ করবে কারণ কোনও বাইট মান লোকালে একটি বৈধ অক্ষর গঠন করে C
  • যে কোনও সময় আপনি যখন ইনপুট ডেটা বা আউটপুট ডেটা প্রক্রিয়া করেন যা কোনও মানুষের জন্য / এর উদ্দেশ্যে নয়। আপনি যদি কোনও ব্যবহারকারীর সাথে কথা বলছেন তবে আপনি তাদের কনভেনশন এবং ভাষাটি ব্যবহার করতে চাইতে পারেন, তবে উদাহরণস্বরূপ, আপনি যদি এমন কিছু অ্যাপ্লিকেশন খাওয়ানোর জন্য কিছু নম্বর উত্পন্ন করেন যা ইংলিশ স্টাইলের দশমিক পয়েন্ট বা ইংরেজি মাসের নাম প্রত্যাশা করে, আপনি চাইবেন এলসি_এলএল = সি সেট করুন:

    $ printf '%g\n' 1e-2
    0,01
    $ LC_ALL=C printf '%g\n' 1e-2
    0.01
    $ date +%b
    août
    $ LC_ALL=C date +%b
    Aug
    

    এটি কেস সংবেদনশীল তুলনা (যেমন পছন্দ করা grep -i) এবং কেস রূপান্তর ( awkএর toupper(), dd conv=ucase...) এর মতো জিনিসগুলিতেও প্রযোজ্য । এই ক্ষেত্রে:

    grep -i i
    

    Iব্যবহারকারীর লোকালয়ে মিলতে গ্যারান্টিযুক্ত নয় । উদাহরণস্বরূপ কিছু তুর্কি স্থানীয় অবস্থানে এটি ওপরের ক্ষেত্রে iযেমন İ(বিন্দুটি নোট করুন) হয় না এবং লোয়ার-কেস Iহয় ı(অনুপস্থিত বিন্দুকে নোট করুন)।


The পাঠ্যের এনকোডিংয়ের উপর নির্ভর করে, যদিও এটি করা সঠিকভাবে করা উচিত নয়। এটি ইউটিএফ -8 বা একক-বাইট অক্ষর সেটগুলির জন্য বৈধ (যেমন আইসো -8859-1), তবে অ-ইউটিএফ -8 মাল্টিবাইট অক্ষর সেটগুলি অগত্যা নয়।

উদাহরণস্বরূপ, আপনি যদি কোনও zh_HK.big5hkscsলোকালে (হংকং, বিআইজি 5 চীনা বর্ণচিহ্ন এনকোডিংয়ের হংকং বৈকল্পিক ব্যবহার করে) থাকেন এবং আপনি এই অক্ষরটিতে এনকোডযুক্ত একটি ফাইলের মধ্যে ইংরেজী বর্ণগুলি সন্ধান করতে চান, যা হয়:

LC_ALL=C grep '[[:alpha:]]'

অথবা

LC_ALL=C grep '[a-zA-Z]'

কারণ যে অক্ষরসেট এ, ভুল হবে (এবং আরও অনেক কিছু, কিন্তু কষ্টসহকারে ব্যবহৃত যেহেতু হল UTF-8 বেরিয়ে আসেন), অক্ষরের একটি অনেক ধারণ বাইট যে ZA-z- র অক্ষরের হওয়া ASCII এনকোডিং মিলা। উদাহরণস্বরূপ, সমস্ত A䨝䰲丕乙乜你再劀劈呸哻唥唧噀噦嚳坽(এবং আরও অনেক) এর এনকোডিং রয়েছে A0x96 0x41, এবং AASCII এর মতো 0x41। সুতরাং আমাদের LC_ALL=C grep '[a-zA-Z]'সেই লাইনগুলিতে মেলে যা এই অক্ষরগুলিকে ধারণ করে কারণ এটি বাইটগুলির সেই ক্রমগুলির ভুল ব্যাখ্যা করে।

LC_COLLATE=C grep '[A-Za-z]'

কাজ করবে, তবে LC_ALLঅন্যথায় সেট না করা থাকলে (যা ওভাররাইড হবে LC_COLLATE)। সুতরাং আপনি করতে শেষ হতে পারে:

grep '[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]'

আপনি যদি লোকেলের এনকোডিং-এ এনকোড করা কোনও ফাইলের মধ্যে ইংরেজী বর্ণগুলি সন্ধান করতে চান।


12
+1, এটি সেরা উত্তর (ওভাররাইডিং নির্দেশ করার জন্য ইত্যাদি)। তবে ইগনাসিওর উত্তরের (সুন্দর) উদাহরণগুলির অভাব রয়েছে ^^
অলিভিয়ার ডুলাক

1
একটি ছোট্ট নাইটপিক: Cলোকেল কেবলমাত্র "পোর্টেবল ক্যারেক্টার সেট" (এএসসিআইআই 0-127) সমর্থন করার জন্য প্রয়োজন, এবং চরগুলি> 127 এর জন্য আচরণ প্রযুক্তিগতভাবে অনির্দিষ্ট । অনুশীলনে, বেশিরভাগ প্রোগ্রামগুলি এগুলিকে অস্বচ্ছ ডেটা হিসাবে বিবেচনা করবে এবং আপনি বর্ণিত হিসাবে এগুলি পাস করবেন। তবে সব কিছু নয়: বিশেষত, লোকালে চলতে থাকলে রুবি বাইটগুলি> 127 এর সাথে চর ডেটাতে শ্বাসরোধ করতে পারে C। আমি প্রযুক্তিগতভাবে এটি "উপযোগী" কিনা জানি না, তবে আমরা এটি বুনোতে দেখেছি
অ্যান্ড্রু জ্যাঙ্ক

2
@ অ্যান্ড্রুজ্যাঙ্ক, হ্যাঁ নোট করুন যে পোর্টেবল ক্যারেক্টার সেট সেটটি ASCII বা 0-127 এ বোঝায় না। "সি" লোকেল চরিত্রের সেটগুলির বৈশিষ্ট্যগুলি কী হবে এবং সাধারণ sensক্যমত্য (এবং এটি পরবর্তী স্পষ্টে স্পষ্ট করা হবে) এ বিষয়ে অস্টিন গ্রুপের মেলিং তালিকায় অনেক আলোচনা হয়েছে যে চরসেটটি একক হবে- বাইট করুন এবং পুরো 8 বিট পরিসীমাটি অন্তর্ভুক্ত করুন (এখানে বর্ণিত বৈশিষ্ট্য সহ)। মাঝামাঝি সময়ে, হ্যাঁ কিছুটা বিচ্যুতি হতে পারে (বাগ হিসাবে বা কারণটি স্পষ্টভাবে যথেষ্ট স্পষ্ট নয়)। যে কোনও কেসটিতে LC_ALL = C সবচেয়ে নিকটতম আপনি বুদ্ধিমান আচরণ পেতে পারেন।
স্টাফেন চেজেলাস

1
ইউটিএফ -8 এ ইউনিকোড কোডপয়েন্টে সর্বোচ্চ 4 টি অক্টেট (বা বাইটস) থাকতে পারে তবে কিছু চরিত্রের জন্য আরও একটি কোডপয়েন্ট প্রয়োজন, যা 6 টি অক্টেটের চেয়ে দীর্ঘ সিকোয়েন্সগুলিতে নিয়ে যেতে পারে।
12431234123412341234123

1
@ 12431234123412341234123, মূল UTF-8 এনকোডিং U + এ 7FFFFFFF পর্যন্ত জুড়ে (6 বাইট, এবং সেখানে মত 13 বাইট পর্যন্ত যেতে কিছু এক্সটেনশান দ্বারা perls 'এর \x{7FFFFFFFFFFFFFFF}) এবং যখন ইউনিকোড কোড পয়েন্ট পরিসীমা ইচ্ছামত U + এ 10FFFF সীমাবদ্ধ করা হয়েছে (ইউটিএফ -16 ডিজাইনের সীমাবদ্ধতার কারণে), কিছু সরঞ্জাম এখনও 6 বাইট অক্ষর সনাক্ত করে / উত্পাদন করে। এটি আমি 6 বাইট অক্ষর দ্বারা বোঝাতে চাইছি। ইউনিক্স শব্দার্থবিজ্ঞানে একটি চরিত্র একটি কোডপয়েন্ট। আপনার একাধিক কোডপয়েন্ট "অক্ষর" সাধারণত চরিত্রগুলি থেকে বিচ্ছিন্ন করতে গ্রাফেম ক্লাস্টার হিসাবে উল্লেখ করা হয়।
স্টাফেন চেজেলাস

7

Cডিফল্ট লোকেল, "পসিক্স" হ'ল "সি" এর উপাধি। আমার ধারণা "সি" এএনএসআই-সি থেকে প্রাপ্ত। হতে পারে এএনএসআই-সি "পসিক্স" লোকেলের সংজ্ঞা দেয়।


সি এবং ইউএনআইএক্স উভয়ই এএনএসআই সি
একটি সিভিএন

@ মাইকেলKjörling: তাই? আমি প্রাক-এএনএসআই ডকুমেন্টেশন দেখেছি এবং এর কোনও লোকেল নেই। অভ্যন্তরীণ এটিএন্ডটি বেল ল্যাবগুলিতে, প্রত্যেকেই ইংরেজিতে কথা বলেছিল।
এমসাল্টারগুলি 22:13

@ এসএমএলটাররা সত্য যে সি ভাষার জন্য প্রাক-এএনএসআই ডকুমেন্টেশনে লোকেলগুলি উল্লেখ করা হয়নি (যা বোঝাতে পারে বা প্রাক-এএনএসআই, সি এর লোকালগুলির কোনও ধারণা ছিল না; সর্বোপরি, আমি যথেষ্ট নিশ্চিত যে ভাষা এখনও অবধি নেই , তবে এটি বিন্দুটির পাশে) বোঝায় না যে Cলোকেলের নামটি "এএনএসআই সি" থেকে এসেছে।
একটি সিভিএন

2
@ মাইকেলKjörling: আপনি বিষয়টি অনুপস্থিত। যখন লোকেলগুলি চালু হয়েছিল, "সি" এর অর্থ ইতিমধ্যে "এএনএসআই সি" ছিল। অতীতে এটির অর্থ কেআরআর সি অপ্রাসঙ্গিক।
এমসাল্টারস

3

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

এটি ওএস এক্সে 26 এবং উবুন্টুতে 310 মুদ্রণ করে:

export LC_ALL=en_US.UTF-8
printf %b $(printf '\\U%08x\\n' $(seq $((0x11)) $((0x10ffff))))|grep -a '[a-z]'|wc -l

নীচের কোডটি ওএস এক্স-তে কিছুই প্রিন্ট করে না, ইঙ্গিত দেয় যে ইনপুটটি সাজানো হয়েছে। অপসারণ করা ছয়টি সারোগেট অক্ষর একটি অবৈধ বাইট সিকোয়েন্স ত্রুটির কারণ ঘটায়।

export LC_ALL=en_US.UTF-8
for ((i=1;i<=0x1fffff;i++));do
  x=$(printf %04x $i)
  [[ $x = @(000a|d800|db7f|db80|dbff|dc00|dfff) ]]&&continue
  printf %b \\U$x\\n
done|sort -c

নীচের কোডটি ওএস এক্স-তে কোনও কিছুই মুদ্রণ করে না, এটি নির্দেশ করে যে কোনও দুটি টানা কোড পয়েন্ট নেই (কমপক্ষে ইউ + 000 বি এবং ইউ + ডি 7 এফএফ এর মধ্যে) একই সমান্তরাল ক্রম রয়েছে।

export LC_ALL=en_US.UTF-8
for ((i=0xb;i<=0xd7fe;i++));do
  printf %b $(printf '\\U%08x\\n' $((i+1)) $i)|sort -c 2>/dev/null&&echo $i
done

(উপরের উদাহরণগুলি ব্যবহার করুন %bকারণ printf \\U25zsh এ ত্রুটি হয়)

জিএনইউ সিস্টেমে একই রকম কোলাকশন ক্রমযুক্ত কিছু অক্ষর এবং বর্ণগুলির ক্রমগুলির ওএস এক্সে সমান কোলাকেশন ক্রম নেই This এটি প্রিন্ট করে OS ওএস এক্সের প্রথম (ওএস এক্স sortবা জিএনইউ ব্যবহার করে sort) তবে উবুন্টুতে প্রথম:

export LC_ALL=en_US.UTF-8;printf %s\\n ② ①|sort

এটি ওএস এক্সে তিনটি লাইন মুদ্রণ করে (ওএস এক্স sortবা জিএনইউ ব্যবহার করে sort) তবে উবুন্টুতে একটি লাইন:

export LC_ALL=en_US.UTF-8;printf %b\\n \\u0d4c \\u0d57 \\u0d46\\u0d57|sort -u

এই পার্থক্য আছে কেন কেউ জানেন?
1.61803

3

এটি প্রদর্শিত হয় যে LC_COLLATEls এর পাশাপাশি ব্যবহৃত "বর্ণমালার ক্রম "ও নিয়ন্ত্রণ করে। মার্কিন লোকেল নিম্নরূপে বাছাই করবে:

a.C
aFilename.C
aFilename.H
a.H

মূলত পিরিয়ড উপেক্ষা করা। আপনি পছন্দ করতে পারেন:

a.C
a.H
aFilename.C
aFilename.H

আমি অবশ্যই করি। LC_COLLATEএটি Cসম্পাদন করা সেট । নোট করুন যে এটি সমস্ত বড় বড় রাজধানীর পরে ছোট কেসটিকেও সাজিয়ে রাখবে:

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