“LC_ALL = C” කරන්නේ කුමක්ද?


348

වෙන්නේ මොනවාද Cවටිනාකමක් LC_ALLයුනික්ස් වැනි පද්ධති ද?

එය සෑම අංශයක් සඳහාම එකම පෙදෙසකට බල කරන බව මම දනිමි නමුත් කුමක් කරන්නේද C?


1
ඔබට xclockඅනතුරු ඇඟවීමේ ( Missing charsets in String to FontSet conversion) ගැටළුවක් විසඳීමට අවශ්‍ය නම්, ඔබ LC_ALL=C.UTF-8සිරිලික් සමඟ ඇති ගැටළු වළක්වා ගැනීමට භාවිතා කරන්නේ නම් වඩා හොඳය . මෙම පරිසර විචල්‍යය සැකසීමට ඔබ පහත දැක්වෙන රේඛාව ~/.bashrcගොනුවේ අවසානයට එක් කළ යුතුය -export LC_ALL=C.UTF-8
fedotsoldier

edfedotsoldier ඔබ බොහෝ විට ප්‍රශ්නයක් ඇසිය යුතු අතර ඔබ විසින්ම පිළිතුර ලබා දිය යුතුය, එය ප්‍රශ්නයට සම්බන්ධ යැයි මම නොසිතමි. එය ඔබට ඇති විවිධ ගැටලුවලට පිළිතුරකි.
jcubic

ඔව්, ඔබ හරි, හරි
ෆෙඩොට්සෝල්ඩර්

Answers:


232

ප්‍රතිදානය සඳහා පෙරනිමි භාෂාව භාවිතා කිරීමට එය යෙදුම් වලට බල කරයි:

$ 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

23
හොඳ උදාහරණ සඳහා +1, නමුත් ස්ටෙෆන්ගේ පිළිතුරෙහි ඇති වැදගත් තොරතුරු නොමැත ...
ඔලිවියර් ඩුලැක්

5
පෙරනිමි භාෂාවෙන් ඔබ අදහස් කරන්නේ කුමක්ද?
ස්ටෙෆාන් චසෙලාස්

2
ඔව්, කතුවරයාට ටින් එකේ කියන දේ නොකර ඇතුළුව ඔහු කැමති දෙයක් කළ හැකි බව මට වැටහේ. කාරණය නම්. LC_ALL = C (LC_COLLATE) හි වර්ග කිරීමේ අනුපිළිවෙල අර්ථවත් කරන එකම භාෂාව වන LC_ALL = C හි අක්ෂර මාලාව සමඟ නිවැරදිව නිරූපණය කළ හැකි එකම භාෂාව එක්සත් ජනපද ඉංග්‍රීසි වේ, LC_ALL = C (LC_TIME) සඳහා ඉංග්‍රීසි මාස සහ දින නම් ඇත. LC_ALL = C වෙතින් වෙනත් භාෂාවකින් LC_ALL = C පණිවිඩය ලබා දුන් යෙදුම් මා දැක නැත. එසේ නොවේ නම් වැඩසටහනකට එරෙහිව දෝෂයක් වාර්තා කිරීමට මට අයිතියක් තිබේද? (මෙහි ඉංග්‍රීසි භාෂාවට පරිවර්තනය නොකළ යෙදුම් ගැන කතා නොකරයි).
ස්ටෙෆාන් චසෙලාස්

2
ගැටළුව වන්නේ "LC_ALL = C හි අක්ෂර මාලාව සමඟ නිවැරදිව නිරූපණය කළ හැකි එකම භාෂාව එක්සත් ජනපද ඉංග්‍රීසි" යන්නයි. මෙය සාමාන්‍යයෙන් සත්‍ය වන්නේ පටු අක්ෂර භාවිතා කරන විට සී / සී ++ වැඩසටහන් වල පමණි, නමුත් එසේ වුවද ව්‍යතිරේක පවතී (ASCII හි ඇති අක්ෂර සහ සංකේත පමණක් භාවිතා කරන භාෂා කිහිපයක් ඇති බැවින්). සුපුරුදු භාෂාව ඉංග්‍රීසි නොවන විට දෝෂයක් වාර්තා කිරීමෙන් ඔබට පෙනෙනු ඇත ... මෝඩයෙක්.
ඉග්නේෂියෝ වස්කස්-ඒබ්‍රම්ස්

3
ඉංග්‍රීසියෙන් (LANG = en_US.utf8 යන්නෙහි තේරුම) පණිවිඩවලට නූල් උපුටා දැක්වීම සඳහා “” වැනි යුනිකෝඩ් අක්ෂර භාවිතා කළ හැකි බව සලකන්න. LANG = C හි, එය සතුව ඇත්තේ ASCII අය පමණි (ද්විත්ව උපුටා දැක්වීම්, පසුබිම් සහ අපෝස්තලික).
ඇන්ජල්

363

LC_ALLපරිසර විචල්‍යය යනු අනෙකුත් සියලුම ප්‍රාදේශීයකරණ සැකසුම් අභිබවා යන ( සමහර තත්වයන් හැර$LANGUAGE ).

ප්‍රාදේශීයකරණයේ විවිධ පැතිකඩයන් (දහසක් බෙදුම්කරු හෝ දශම ලක්ෂ්‍ය චරිතය, අක්ෂර කට්ටලය, වර්ග කිරීමේ අනුපිළිවෙල, මාසය, දින නම්, භාෂාව හෝ යෙදුම් පණිවිඩ දෝෂ පණිවිඩ, මුදල් සංකේතය වැනි) පරිසර විචල්‍යයන් කිහිපයක් භාවිතා කර සැකසිය හැකිය.

ඔබ සාමාන්‍යයෙන් $LANGඔබේ මනාපය ඔබේ කලාපය හඳුනා ගන්නා අගයක් සමඟ සකසනු ඇත ( fr_CH.UTF-8ඔබ ප්‍රංශ භාෂාව කතා කරන ස්විට්සර්ලන්තයේ නම්, යූටීඑෆ් -8 භාවිතා කරමින්). තනි LC_xxxවිචල්යයන් යම් අංගයක් අභිබවා යයි. LC_ALLඒවා සියල්ලම අභිබවා යයි. මෙම localeතර්කය තොරව හඳුන්වන විට විධානය, වත්මන් සැකසුම් සාරාංශයක් ලබා දෙයි.

උදාහරණයක් ලෙස, GNU පද්ධතියක, මට ලැබෙන්නේ:

$ 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 සමඟ සියල්ල අභිබවා යන්න.

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

ස්ක්‍රිප්ට් එකක, ඔබට නිශ්චිත සැකසුමක් බල කිරීමට අවශ්‍ය නම්, පරිශීලකයා බල කර ඇත්තේ කුමන සැකසුම් දැයි ඔබ නොදන්නා බැවින් (සමහර විට LC_ALL ද විය හැකිය), ඔබේ හොඳම, ආරක්ෂිත සහ සාමාන්‍යයෙන් එකම විකල්පය වන්නේ LC_ALL බල කිරීමයි.

මෙම Cපෙදෙසි සරලතම පෙදෙසි විය අදහස් කරන බව විශේෂ පෙදෙසි වේ. අනෙක් ස්ථාන මිනිසුන් සඳහා වන අතර සී පෙදෙස පරිගණක සඳහා යැයි ඔබට පැවසිය හැකිය. සී පෙදෙසෙහි, අක්ෂර තනි බයිට් වේ, අක්ෂර කට්ටලය ASCII වේ (හොඳයි, අවශ්‍ය නොවේ, නමුත් ප්‍රායෝගිකව අපගෙන් බොහෝ දෙනෙකුට කවදා හෝ භාවිතා කිරීමට හැකි පද්ධති වල පවතිනු ඇත), වර්ග කිරීමේ අනුපිළිවෙල පදනම් වන්නේ බයිට් අගයන් මත ය, භාෂාව සාමාන්‍යයෙන් එක්සත් ජනපද ඉංග්‍රීසි වේ (යෙදුම් පණිවිඩ සඳහා (මාස හෝ දින නම් හෝ පද්ධති පුස්තකාලවල පණිවිඩ වැනි), එය යෙදුම් කතෘගේ අභිමතය පරිදි වේ) සහ මුදල් සංකේත වැනි දේ අර්ථ දක්වා නැත.

සමහර පද්ධති වල, POSIX පෙදෙස සමඟ වෙනසක් ඇත, උදාහරණයක් ලෙස ASCII නොවන අක්ෂර සඳහා වර්ග කිරීමේ අනුපිළිවෙල අර්ථ දක්වා නොමැත.

ඔබේ ස්ක්‍රිප්ටයට බාධා කිරීම සඳහා පරිශීලකයාගේ සැකසුම් වලක්වා ගැනීම සඳහා ඔබ සාමාන්‍යයෙන් LC_ALL = C සමඟ විධානයක් ක්‍රියාත්මක කරයි. උදාහරණයක් ලෙස, ඔබට අවශ්ය නම්, [a-z]සිට 26 ASCII අක්ෂර ගැලපෙන aකිරීමට z, ඔබට කැප කිරීමට සිදු LC_ALL=C.

GNU පද්ධති වල, LC_ALL=Cසහ LC_ALL=POSIX(හෝ LC_MESSAGES=C|POSIX) අභිබවා $LANGUAGEයන අතර, LC_ALL=anything-elseඑසේ නොවේ.

ඔබ සාමාන්‍යයෙන් සැකසිය යුතු අවස්ථා කිහිපයක් LC_ALL=C:

  • sort -uහෝ sort ... | uniq.... C හැර වෙනත් බොහෝ ස්ථානවල, සමහර පද්ධතිවල (විශේෂයෙන් GNU ඒවා), සමහර අක්ෂරවල එකම වර්ග කිරීමේ අනුපිළිවෙලක් ඇත. sort -uඅද්විතීය රේඛා වාර්තා නොකරයි, නමුත් සමාන වර්ග කිරීමේ අනුපිළිවෙලක් ඇති එක් එක් පේළි සමූහයෙන් එකකි. එබැවින් ඔබට අද්විතීය රේඛා අවශ්‍ය නම්, ඔබට අක්ෂර බයිට් සහ සියලුම අක්ෂර එකිනෙකට වෙනස් වර්ග කිරීමේ අනුපිළිවෙලක් ඇති ( Cපෙදෙසි සහතික කරන) ස්ථානයක් අවශ්‍ය වේ.
  • =POSIX අනුකූලතාවයේ ක්‍රියාකරුට exprහෝ POSIX අනුකූලතා ක්‍රියාකරුටද මෙය අදාළ වේ ( සහ ඒ සම්බන්ධයෙන් POSIX නොවේ), එමඟින් නූල් දෙකක් සමානද, නමුත් ඒවා එක හා සමානද යන්න පරීක්ෂා නොකරයි.==awkmawkgawk
  • අක්ෂර පරාසය in වැනි ය grep. පරිශීලකයාගේ භාෂාවෙන් අකුරක් ගැලපීමට ඔබ අදහස් කරන්නේ නම්, භාවිතා කරන්න grep '[[:alpha:]]'සහ වෙනස් නොකරන්න LC_ALL. නමුත් ඔබට a-zA-ZASCII අක්ෂර ගැලපීමට අවශ්‍ය නම්, ඔබට හෝ LC_ALL=C grep '[[:alpha:]]'or අවශ්‍ය වේ LC_ALL=C grep '[a-zA-Z]'. [a-z]පසු aහා පෙර වර්ග කරන අක්ෂර සමඟ ගැලපේ z(බොහෝ API සමඟ එය ඊට වඩා සංකීර්ණ වුවද). වෙනත් ස්ථාන වල, ඔබ සාමාන්‍යයෙන් ඒවා මොනවාදැයි නොදනී. උදාහරණයක් ලෙස සමහර ස්ථාන එසේ වර්ගීකරණයේ නඩුව නොසලකා [a-z]වැනි සමහර ඒපීඅයි දී bashරටා, ඇතුලත් විය හැකි [B-Z]හෝ [A-Y]. බොහෝ UTF-8 ස්ථාන (ඇතුළු දී en_US.UTF-8බොහෝ පද්ධති මත), [a-z]සිට ලතින් අකුරු ඇතුලත් වනු ඇත aකිරීමට yඋච්චාරණ සහිතව නමුත් එම නොවේ zසිට (zමට සිතාගත නොහැකි ඒවා ඔබට අවශ්‍ය දේ වනු ඇත (ඔබට ඇතුළත් කිරීමට අවශ්‍ය éනොවන්නේ źඇයි?).
  • පාවෙන ලක්ෂ්‍ය අංක ගණිතය ksh93. ksh93තුළ 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
    

    පැති සටහනක් ලෙස: ,දශම බෙදුම්කරු ,ගණිත ක්‍රියාකරු සමඟ ගැටෙන අතර එය තවත් ව්‍යාකූලත්වයක් ඇති කළ හැකිය.

  • ඔබට බයිට් වීමට අක්ෂර අවශ්‍ය වූ විට. වර්තමානයේ බොහෝ ස්ථාන UTF-8 මත පදනම් වන අතර එයින් අදහස් කරන්නේ අක්ෂර 1 සිට 6 දක්වා ගත හැකි බවයි. පෙළ උපයෝගීතා සමඟ බයිට් වීමට අදහස් කරන දත්ත සමඟ කටයුතු කරන විට, ඔබට LC_ALL = C සැකසීමට අවශ්‍ය වනු ඇත. යූටීඑෆ් -8 දත්ත විග්‍රහ කිරීම සඳහා පිරිවැයක් ඇති බැවින් එය කාර්ය සාධනය සැලකිය යුතු ලෙස වැඩි දියුණු කරනු ඇත.
  • පෙර ලක්ෂ්‍යයේ සහසම්බන්ධය: පෙළ සැකසීමේදී ආදානය ලියා ඇත්තේ කුමන අක්‍ෂර කට්ටලයක්දැයි ඔබ නොදන්නා නමුත් එය ASCII සමඟ අනුකූල යැයි උපකල්පනය කළ හැකිය (සියලුම අක්ෂර කට්ටලවලම පාහේ). උදාහරණයක් ලෙස grep '<.*>'a අඩංගු රේඛා සෙවීම සඳහා <, >ඔබ UTF-8 පෙදෙසක සිටී නම් යුගලය ක්‍රියා නොකරනු ඇති අතර ආදානය iso8859-15 වැනි තනි-බයිට් 8-බිට් අක්ෂර කට්ටලයක් තුළ කේතනය කර ඇත. එයට හේතුව .iso8859-15 හි ගැලපෙන අක්ෂර සහ ASCII නොවන අක්ෂර පමණක් UTF-8 හි වලංගු අක්ෂරයක් සෑදීමට නොහැකි වීමයි. අනෙක් අතට, LC_ALL=C grep '<.*>'ඕනෑම බයිට් අගයක් පෙදෙසෙහි වලංගු අක්ෂරයක් Cසාදන බැවින් එය ක්‍රියා කරයි.
  • ඔබ මිනිසෙකුගෙන් / අපේක්‍ෂා නොකරන ආදාන දත්ත හෝ ප්‍රතිදාන දත්ත සැකසෙන ඕනෑම වේලාවක. ඔබ පරිශීලකයෙකු සමඟ කතා කරන්නේ නම්, ඔබට ඔවුන්ගේ සම්මුතිය සහ භාෂාව භාවිතා කිරීමට අවශ්‍ය විය හැකිය, නමුත් නිදසුනක් ලෙස, ඉංග්‍රීසි විලාසිතාවේ දශම ලකුණු හෝ ඉංග්‍රීසි මාස නාමයන් අපේක්ෂා කරන වෙනත් යෙදුමක් පෝෂණය කිරීම සඳහා ඔබ යම් සංඛ්‍යා උත්පාදනය කරන්නේ නම්, ඔබට අවශ්‍ය වනු ඇත LC_ALL = 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 පෙළ කේතනය කිරීම මත පදනම්ව, එය කළ යුතු නිවැරදි දෙය නොවේ. එය UTF-8 හෝ තනි-බයිට් අක්ෂර කට්ටල සඳහා (iso-8859-1 වැනි) වලංගු වේ, නමුත් අවශ්‍යයෙන්ම UTF-8 නොවන බහු බයිට් අක්ෂර කට්ටල සඳහා නොවේ.

උදාහරණයක් ලෙස, ඔබ පෙදෙසක සිටී නම් zh_HK.big5hkscs(හොංකොං, BIG5 චීන අක්ෂර කේතීකරණයේ හොංකොං ප්‍රභේදය භාවිතා කරමින්), සහ ඔබට එම අක්ෂරවල කේතනය කර ඇති ගොනුවක ඉංග්‍රීසි අකුරු සෙවීමට අවශ්‍ය නම්:

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

හෝ

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

වැරදියි, මන්ද එම අක්ෂර මාලාවේ (සහ තවත් බොහෝ දේ, නමුත් යූටීඑෆ් -8 එළියට පැමිණි දා සිට එතරම් භාවිතා නොකෙරේ), බොහෝ අක්ෂරවල A-Za-z අක්ෂර ASCII කේතන ක්‍රමයට අනුරූප වන බයිට් අඩංගු වේ . උදාහරණයක් ලෙස, සියල්ලම A䨝䰲丕乙乜你再劀劈呸哻唥唧噀噦嚳坽(සහ තවත් බොහෝ දේ) කේතනය කිරීම අඩංගු වේ A. 0x96 0x41, සහ AASCII හි මෙන් 0x41 වේ. LC_ALL=C grep '[a-zA-Z]'එම නිසා බයිට් අනුපිළිවෙල වැරදියට අර්ථකථනය කරන බැවින් එම අක්ෂර අඩංගු රේඛාවලට අපි ගැලපේ.

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

ක්‍රියා කරනු ඇත, නමුත් LC_ALLවෙනත් ආකාරයකින් සකසා නොමැති නම් පමණි (එය අභිබවා යනු ඇත LC_COLLATE). එබැවින් ඔබට කළ යුතුව ඇත්තේ:

grep '[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]'

ඔබට ස්ථාන කේතීකරණයේ කේතනය කර ඇති ගොනුවක ඉංග්‍රීසි අකුරු සෙවීමට අවශ්‍ය නම්.


14
+1, එය හොඳම පිළිතුරයි (අතිච්ඡාදනය පෙන්වා දීම සඳහා). නමුත්
ඉග්නේෂියෝගේ

1
සුළු නට්පික්: Cපෙදෙසට අවශ්‍ය වන්නේ “අතේ ගෙන යා හැකි අක්ෂර කට්ටලයට” (ASCII 0-127) සහය දැක්වීමට පමණක් වන අතර, අක්ෂර> 127 සඳහා හැසිරීම තාක්‍ෂණිකව නිශ්චිතව දක්වා නැත . ප්‍රායෝගිකව, බොහෝ වැඩසටහන් ඒවා පාරදෘශ්‍ය දත්ත ලෙස සලකන අතර ඔබ විස්තර කළ පරිදි ඒවා හරහා ගමන් කරනු ඇත. නමුත් සියල්ලම නොවේ: විශේෂයෙන්, රූබී පෙදෙසෙහි ධාවනය වන්නේ නම් බයිට්> 127 සමඟ වර්‍ග දත්ත යටපත් කළ හැකිය C. මම අවංකවම දන්නේ නැහැ එය තාක්‍ෂණිකව “අනුකූලද” කියා, නමුත් අපි එය වනයේ දැක ඇත්තෙමු .
ඇන්ඩ rew ජැන්කේ

2
Nd ඇන්ඩ rew ජැන්කේ, ඔව්. අතේ ගෙන යා හැකි අක්ෂර කට්ටලය ASCII හෝ 0-127 යන්නෙන් ඇඟවෙන්නේ නැති බව සලකන්න. "සී" පෙදෙසි අක්ෂර කට්ටලයේ ගුණාංග මොනවාද යන්න පිළිබඳව ඔස්ටින් කණ්ඩායම් තැපැල් ලැයිස්තුවේ විශාල සාකච්ඡාවක් ඇති අතර පොදු එකඟතාව (සහ එය ඊළඟ පිරිවිතරයෙන් පැහැදිලි වනු ඇත) යනු අක්ෂර මාලාව තනි එකක් වනු ඇති බවයි. බයිට්, සහ සම්පූර්ණ 8bit පරාසය ආවරණය කරයි (මෙහි විස්තර කර ඇති ගුණාංග සමඟ). මධ්යන්ය වේලාවේදී, ඔව් යම් වෙනසක් තිබිය හැකිය (දෝෂයක් ලෙස හෝ පිරිවිතර ප්රමාණවත් තරම් පැහැදිලි නැති නිසා). ඕනෑම ස්ථානයක LC_ALL = C යනු ඔබට බුද්ධිමත් හැසිරීමක් ලබා ගත හැකි ආසන්නතම ස්ථානයයි.
ස්ටෙෆාන් චසෙලාස්

1
යූටීඑෆ් -8 හි යුනිකෝඩ් කේත ලක්ෂ්‍යයකට උපරිම අෂ්ටක 4 ක් (හෝ බයිට්) තිබිය හැකි නමුත් සමහර අක්ෂරවලට එක කේත ලක්ෂ්‍යයක් අවශ්‍ය වන අතර එමඟින් අෂ්ටක 6 ට වඩා දිගු අනුක්‍රමයකට මඟ පෑදිය හැකිය.
12431234123412341234123

1
12431234123412341234123 @, මුල් UTF-8 කවර U + 7FFFFFFF දක්වා සංකේතවත් (6 බයිට්, සහ වැනි 13 බයිට් දක්වා යන්න සමහර දිගු පවතින perlගේ \x{7FFFFFFFFFFFFFFF}) සහ සිංහල යුනිකෝඩ් කේත ලකුණු පරාසය අත්තනෝමතික U + 10FFFF සීමා කර ඇති අතර (UTF-16 සැලසුම් සීමාව නිසා), සමහර මෙවලම් තවමත් බයිට් අක්ෂර 6 ක් හඳුනාගෙන නිෂ්පාදනය කරයි. බයිට් අක්ෂර 6 කින් මා අදහස් කළේ එයයි. යුනික්ස් අර්ථ නිරූපණයෙහි, එක් අක්ෂරයක් එක් කේත ලක්ෂ්‍යයකි. ඔබේ එක් කේත ලක්ෂ්‍යයකට වඩා වැඩි “අක්ෂර” සාමාන්‍යයෙන් අක්ෂර වලින් වෙන්කර හඳුනා ගැනීම සඳහා ග්‍රැෆම් පොකුරු ලෙස සඳහන් කර ඇත.
ස්ටෙෆාන් චසෙලාස්

8

Cපෙරනිමි ස්ථානය වේ, "පොසික්ස්" යනු "සී" හි අන්වර්ථයයි. මම හිතන්නේ "C" ව්‍යුත්පන්න වී ඇත්තේ ANSI-C වලින්. සමහර විට ANSI-C "POSIX" පෙදෙස අර්ථ දක්වයි.


සී සහ යුනික්ස් යන දෙකම බොහෝ දුරට පෙර ANSI C.
CVn

@ මයිකල් ජෝර්ලිං: ඉතින්? මම පූර්ව ANSI ලියකියවිලි දැක ඇත්තෙමි, එහි ස්ථාන නොමැත. අභ්‍යන්තරව AT&T බෙල් ලැබ් හි සියලු දෙනා ඉංග්‍රීසි කතා කළහ.
MSalters

@MSalters, C භාෂාව සඳහා පෙර ANSI ප්රලේඛනය ස්ථාන ගැන සඳහන් නොවන බව (හෝ අදහස් කිරීමට ඉඩ ඇති විය හැකි නොවන බව පෙර ANSI, C ස්ථාන පිළිබඳ සංකල්පයක් නැත තිබුණ ඇත්ත, සියලු පසු, මම ලස්සන වග බලා ගන්න ඉන්නේ භාෂාව තවමත් නැහැ , නමුත් එය කාරණය පසෙකින් ඇත) Cපෙදෙසි නාමය "ANSI C" වෙතින් උපුටා ගත් බවක් අඟවන්නේ නැත .
සීවීඑන්

2
@ මයිකල් ජෝර්ලිං: ඔබට කාරණය මග හැරී ඇත. ස්ථාන හඳුන්වා දුන් විට, "සී" යන්නෙන් දැනටමත් "ඇන්සි සී" යන්න අදහස් විය. අතීතයේ K&R C යන්නෙන් අදහස් කළේ අදාළ නොවේ.
MSalters

4

මට කිව හැකි පරිදි, OS X යූටීඑෆ් -8 ස්ථානවල කේත ලක්ෂ්‍ය එකතු කිරීමේ අනුපිළිවෙල භාවිතා කරයි, එබැවින් එය ස්ටෙෆේන් චසෙලාස් විසින් පිළිතුරෙහි සඳහන් කර ඇති සමහර කරුණු වලට ව්‍යතිරේකයකි.

මෙය OS X හි 26 ක් සහ උබුන්ටු හි 310 මුද්‍රණය කරයි:

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

පහත කේතය OS X හි කිසිවක් මුද්‍රණය නොකරයි, එයින් ඇඟවෙන්නේ ආදානය වර්ග කර ඇති බවයි. ඉවත් කරන ලද අන්වර්ථ අක්ෂර හය නීති විරෝධී බයිට් අනුක්‍රමික දෝෂයක් ඇති කරයි.

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

පහත කේතය OS X හි කිසිවක් මුද්‍රණය නොකරයි, එයින් පෙන්නුම් කරන්නේ එකම කේත අනුපිළිවෙලක් ඇති අඛණ්ඩ කේත ලක්ෂ්‍ය දෙකක් (අවම වශයෙන් U + 000B සහ U + D7FF අතර) නොමැති බවයි.

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 හි දෝෂයක් ඇති බැවිනි.)

GNU පද්ධතිවල එකම සංයුක්ත අනුපිළිවෙලක් ඇති සමහර අක්ෂර සහ අනුක්‍රමයන් OS X හි එකම සංයුක්ත අනුපිළිවෙලක් නොමැත. මෙය මුද්‍රණය කරන්නේ ① පළමුව OS X හි (OS X sortහෝ GNU භාවිතා කරමින් sort) නමුත් ② පළමුව උබුන්ටු වල:

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

මෙය OS X හි පේළි තුනක් මුද්‍රණය කරයි (OS X sortහෝ GNU භාවිතා කරමින් sort) නමුත් උබුන්ටු හි එක් පේළියක්:

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

මෙම වෙනස ඇත්තේ මන්දැයි යමෙක් දන්නවාද?
1.61803

4

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.