संभावित अंतिम समाधान
इसलिए मैंने नीचे दी गई सभी जानकारी ले ली है और इसके साथ आता हूं:
for class in $(
locale -v LC_CTYPE |
sed 's/combin.*//;s/;/\n/g;q'
) ; do
printf "\n\t%s\n\n" $class
recode u2/test16 -q </dev/null |
tr -dc "[:$class:]" |
od -A n -t a -t o1z -w12
done
नोट :
मैं od
वरीयता के लिए अंतिम फिल्टर के रूप में उपयोग करता हूं और क्योंकि मुझे पता है कि मैं मल्टी-बाइट पात्रों के साथ काम नहीं करूंगा, जो इसे सही ढंग से नहीं संभालेंगे। recode u2..dump
दोनों प्रश्न में निर्दिष्ट अधिक आउटपुट उत्पन्न करेंगे और विस्तृत वर्णों को सही ढंग से संभालेंगे।
आउटपुट
upper
A B C D E F G H I J K L
101 102 103 104 105 106 107 110 111 112 113 114 >ABCDEFGHIJKL<
M N O P Q R S T U V W X
115 116 117 120 121 122 123 124 125 126 127 130 >MNOPQRSTUVWX<
Y Z
131 132 >YZ<
lower
a b c d e f g h i j k l
141 142 143 144 145 146 147 150 151 152 153 154 >abcdefghijkl<
m n o p q r s t u v w x
155 156 157 160 161 162 163 164 165 166 167 170 >mnopqrstuvwx<
y z
171 172 >yz<
alpha
A B C D E F G H I J K L
101 102 103 104 105 106 107 110 111 112 113 114 >ABCDEFGHIJKL<
M N O P Q R S T U V W X
115 116 117 120 121 122 123 124 125 126 127 130 >MNOPQRSTUVWX<
Y Z a b c d e f g h i j
131 132 141 142 143 144 145 146 147 150 151 152 >YZabcdefghij<
k l m n o p q r s t u v
153 154 155 156 157 160 161 162 163 164 165 166 >klmnopqrstuv<
w x y z
167 170 171 172 >wxyz<
digit
0 1 2 3 4 5 6 7 8 9
060 061 062 063 064 065 066 067 070 071 >0123456789<
xdigit
0 1 2 3 4 5 6 7 8 9 A B
060 061 062 063 064 065 066 067 070 071 101 102 >0123456789AB<
C D E F a b c d e f
103 104 105 106 141 142 143 144 145 146 >CDEFabcdef<
space
ht nl vt ff cr sp
011 012 013 014 015 040 >..... <
print
sp ! " # $ % & ' ( ) * +
040 041 042 043 044 045 046 047 050 051 052 053 > !"#$%&'()*+<
, - . / 0 1 2 3 4 5 6 7
054 055 056 057 060 061 062 063 064 065 066 067 >,-./01234567<
8 9 : ; < = > ? @ A B C
070 071 072 073 074 075 076 077 100 101 102 103 >89:;<=>?@ABC<
D E F G H I J K L M N O
104 105 106 107 110 111 112 113 114 115 116 117 >DEFGHIJKLMNO<
P Q R S T U V W X Y Z [
120 121 122 123 124 125 126 127 130 131 132 133 >PQRSTUVWXYZ[<
\ ] ^ _ ` a b c d e f g
134 135 136 137 140 141 142 143 144 145 146 147 >\]^_`abcdefg<
h i j k l m n o p q r s
150 151 152 153 154 155 156 157 160 161 162 163 >hijklmnopqrs<
t u v w x y z { | } ~
164 165 166 167 170 171 172 173 174 175 176 >tuvwxyz{|}~<
graph
! " # $ % & ' ( ) * + ,
041 042 043 044 045 046 047 050 051 052 053 054 >!"#$%&'()*+,<
- . / 0 1 2 3 4 5 6 7 8
055 056 057 060 061 062 063 064 065 066 067 070 >-./012345678<
9 : ; < = > ? @ A B C D
071 072 073 074 075 076 077 100 101 102 103 104 >9:;<=>?@ABCD<
E F G H I J K L M N O P
105 106 107 110 111 112 113 114 115 116 117 120 >EFGHIJKLMNOP<
Q R S T U V W X Y Z [ \
121 122 123 124 125 126 127 130 131 132 133 134 >QRSTUVWXYZ[\<
] ^ _ ` a b c d e f g h
135 136 137 140 141 142 143 144 145 146 147 150 >]^_`abcdefgh<
i j k l m n o p q r s t
151 152 153 154 155 156 157 160 161 162 163 164 >ijklmnopqrst<
u v w x y z { | } ~
165 166 167 170 171 172 173 174 175 176 >uvwxyz{|}~<
blank
ht sp
011 040 >. <
cntrl
nul soh stx etx eot enq ack bel bs ht nl vt
000 001 002 003 004 005 006 007 010 011 012 013 >............<
ff cr so si dle dc1 dc2 dc3 dc4 nak syn etb
014 015 016 017 020 021 022 023 024 025 026 027 >............<
can em sub esc fs gs rs us del
030 031 032 033 034 035 036 037 177 >.........<
punct
! " # $ % & ' ( ) * + ,
041 042 043 044 045 046 047 050 051 052 053 054 >!"#$%&'()*+,<
- . / : ; < = > ? @ [ \
055 056 057 072 073 074 075 076 077 100 133 134 >-./:;<=>?@[\<
] ^ _ ` { | } ~
135 136 137 140 173 174 175 176 >]^_`{|}~<
alnum
0 1 2 3 4 5 6 7 8 9 A B
060 061 062 063 064 065 066 067 070 071 101 102 >0123456789AB<
C D E F G H I J K L M N
103 104 105 106 107 110 111 112 113 114 115 116 >CDEFGHIJKLMN<
O P Q R S T U V W X Y Z
117 120 121 122 123 124 125 126 127 130 131 132 >OPQRSTUVWXYZ<
a b c d e f g h i j k l
141 142 143 144 145 146 147 150 151 152 153 154 >abcdefghijkl<
m n o p q r s t u v w x
155 156 157 160 161 162 163 164 165 166 167 170 >mnopqrstuvwx<
y z
कार्यक्रम एपीआई
जैसा कि मैं नीचे प्रदर्शित करता हूं, recode
आपको अपना पूरा चरित्र मानचित्र प्रदान करेगा। अपने मैनुअल के अनुसार, यह DEFAULT_CHARSET
पर्यावरण चर के वर्तमान मूल्य के अनुसार पहले करता है , या, इसे विफल करते हुए, यह ठीक उसी तरह से संचालित होता है जैसे आप निर्दिष्ट करते हैं:
जब एक चारसेट नाम छोड़ा जाता है या खाली छोड़ दिया जाता है, तो DEFAULT_CHARSET
इसके बजाय पर्यावरण में चर का मूल्य उपयोग किया जाता है। यदि यह चर परिभाषित नहीं है, तो recode
लाइब्रेरी वर्तमान लोकेल के एन्कोडिंग का उपयोग करती है । पर POSIX शिकायत प्रणाली, इस वातावरण चर के बीच पहले गैर-खाली मान पर निर्भर करता है LC_ALL, LC_CTYPE, LANG
और आदेश के माध्यम से निर्धारित किया जा सकताlocale charmap.
यह भी ध्यान देने योग्य recode
है कि यह एक एपी है :
नाम दिया गया कार्यक्रम recode
सिर्फ उसकी रीकोडिंग लाइब्रेरी का एक आवेदन है। रीकोडिंग लाइब्रेरी अन्य C कार्यक्रमों के लिए अलग से उपलब्ध है। रिकोडिंग लाइब्रेरी के साथ कुछ परिचित प्राप्त करने का एक अच्छा तरीका recode
कार्यक्रम से परिचित होना है।
एक बार स्थापित होने के बाद रीकोडिंग लाइब्रेरी का उपयोग करने के लिए, C प्रोग्राम के लिए एक पंक्ति होनी चाहिए:
#include <recode.h>
अंतरराष्ट्रीय स्तर पर अनुकूल स्ट्रिंग तुलना के लिए POSIX
और C
मानक strcoll()
फ़ंक्शन को परिभाषित करते हैं:
strcoll()
समारोह से स्ट्रिंग की ओर इशारा किया तुलना करेगा s1
करने के लिए स्ट्रिंग के लिए से बताया s2
, दोनों वर्तमान स्थान के LC_COLLATE श्रेणी के लिए उचित रूप में व्याख्या की।
strcoll()
समारोह errno यदि सफल की सेटिंग में परिवर्तन नहीं होगा।
चूंकि कोई वापसी मान किसी त्रुटि को इंगित करने के लिए आरक्षित नहीं है, इसलिए त्रुटि स्थितियों की जांच के लिए आवेदन करने के लिए एक आवेदन को 0 पर सेट किया जाना चाहिए, फिर कॉल करें
strcoll()
, फिर गलत की जांच करें।
यहाँ इसके उपयोग का एक अलग स्थित उदाहरण दिया गया है:
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abc");
strcpy(str2, "ABC");
ret = strcoll(str1, str2);
if(ret > 0)
{
printf("str1 is less than str2");
}
else if(ret < 0)
{
printf("str2 is less than str1");
}
else
{
printf("str1 is equal to str2");
}
return(0);
}
POSIX
चरित्र वर्गों के बारे में , आपने पहले ही नोट कर लिया है कि आपने C
इन्हें खोजने के लिए एपीआई का उपयोग किया है । यूनिकोड चरित्र और वर्गों के लिए आप वांछित आउटपुट प्राप्त करने के लिए recode's
डंप-विथ-नाम चारसेट का उपयोग कर सकते हैं । इसके मैनुअल से फिर :
उदाहरण के लिए, कमांड का recode l2..full < input
अर्थ लैटिन -2 से यूसीएस -2 में एक आवश्यक रूपांतरण है , क्योंकि डंप-विथ-नाम केवल यूसीएस -2 से जुड़ा हुआ है । ऐसे मामलों में, डंप में recode
मूल लैटिन -2 कोड प्रदर्शित नहीं करता है
, केवल संबंधित यूसीएस -2 मान। एक सरल उदाहरण देने के लिए, कमांड
echo 'Hello, world!' | recode us..dump
निम्नलिखित उत्पादन का उत्पादन:
UCS2 Mne Description
0048 H latin capital letter h
0065 e latin small letter e
006C l latin small letter l
006C l latin small letter l
006F o latin small letter o
002C , comma
0020 SP space
0077 w latin small letter w
006F o latin small letter o
0072 r latin small letter r
006C l latin small letter l
0064 d latin small letter d
0021 ! exclamation mark
000A LF line feed (lf)
वर्णनात्मक टिप्पणी अंग्रेजी और ASCII में दी गई है, फिर भी यदि अंग्रेजी विवरण उपलब्ध नहीं है, लेकिन एक फ्रांसीसी है, तो लैटिन -1 का उपयोग करते हुए, इसके बजाय फ्रांसीसी विवरण दिया गया है। हालाँकि, यदि
LANGUAGE
या LANG
पर्यावरण चर अक्षरों के साथ शुरू होता है fr , तो लिस्टिंग वरीयता फ्रेंच में जाती है जब दोनों विवरण उपलब्ध हैं।
इसके सम्मिलित टेस्ट डेटासेट के साथ ऊपर दिए गए समान सिंटैक्स का उपयोग करके मैं अपना स्वयं का चरित्र मानचित्र प्राप्त कर सकता हूं:
recode -q u8/test8..dump </dev/null
आउटपुट
UCS2 Mne Description
0001 SH start of heading (soh)
0002 SX start of text (stx)
0003 EX end of text (etx)
...
002B + plus sign
002C , comma
002D - hyphen-minus
...
0043 C latin capital letter c
0044 D latin capital letter d
0045 E latin capital letter e
...
006B k latin small letter k
006C l latin small letter l
006D m latin small letter m
...
007B (! left curly bracket
007C !! vertical line
007D !) right curly bracket
007E '? tilde
007F DT delete (del)
लेकिन आम पात्रों के लिए, recode
स्पष्ट रूप से आवश्यक नहीं है। यह आपको 128-बाइट चारसेट में सब कुछ के लिए नामित नाम देना चाहिए:
printf %b "$(printf \\%04o $(seq 128))" |
luit -c |
od -A n -t o1z -t a -w12
आउटपुट
001 002 003 004 005 006 007 010 011 012 013 014 >............<
soh stx etx eot enq ack bel bs ht nl vt ff
...
171 172 173 174 175 176 177 >yz{|}~.<
y z { | } ~ del
बेशक, केवल 128-बाइट्स का प्रतिनिधित्व किया जाता है, लेकिन ऐसा इसलिए है क्योंकि मेरा लोकेल, utf-8 चार्मैप्स या नहीं, ASCII चारसेट का उपयोग करता है और इससे ज्यादा कुछ नहीं। इतना सब मुझे मिलता है। अगर मैं इसे luit
फ़िल्टर किए बिना चला देता , od
तो इसे वापस घुमा देता और उसी नक्शे को फिर से प्रिंट करता\0400.
उपरोक्त विधि के साथ दो प्रमुख समस्याएं हैं, हालांकि। सबसे पहले सिस्टम के कोलाजेशन ऑर्डर है - गैर-एएससीआईआई स्थानों के लिए, चार्जसेट के लिए काटने के मूल्य केवल उनेस में नहीं हैं seq
, जो कि, जैसा कि मुझे लगता है, समस्या का मूल है जिसे आप हल करने की कोशिश कर रहे हैं।
खैर, GNU tr's man
पेज बताता है कि यह [:upper:]
[:lower:]
क्रम में कक्षाओं का विस्तार करेगा - लेकिन यह बहुत कुछ नहीं है।
मुझे लगता है कि कुछ भारी-भरकम समाधानों को लागू किया जा सकता है, sort
लेकिन बैकएंड प्रोग्रामिंग एपीआई के लिए यह एक बहुत ही अच्छा उपकरण होगा।
recode
इस बात को सही ढंग से करेंगे, लेकिन आप दूसरे दिन कार्यक्रम से बहुत प्यार नहीं करते थे। हो सकता है कि आज के संपादन इस पर अधिक अनुकूल प्रकाश डालेंगे या शायद नहीं।
GNU gettext
फ़ंक्शन लाइब्रेरी भी प्रदान करता है, और यह कम से कम संदर्भ के लिए इस समस्या को हल करने में सक्षम प्रतीत होता है LC_MESSAGES
:
- समारोह: char * bind_textdomain_codeset
( const char *domainname,
const char *codeset
)
bind_textdomain_codeset
समारोह डोमेन के लिए संदेश कैटलॉग के लिए उत्पादन वर्ण सेट निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता
domainname । Codeset तर्क एक वैध होना चाहिए codeset नाम है जिसके लिए इस्तेमाल किया जा सकता iconv_open समारोह, या एक नल पॉइंटर।
यदि codeset पैरामीटर अशक्त सूचक है, bind_textdomain_codeset
वर्तमान में चयनित रिटर्न codeset नाम के साथ डोमेन के लिए
domainname । यदि कोई कोडसेट अभी तक चयनित नहीं हुआ है तो यह NULL देता है ।
bind_textdomain_codeset
समारोह में कई बार इस्तेमाल किया जा सकता। यदि एक ही डोमेन नाम तर्क के साथ कई बार उपयोग किया जाता है, तो बाद में कॉल पहले की गई सेटिंग्स को ओवरराइड करता है।
bind_textdomain_codeset
समारोह एक स्ट्रिंग चयनित codeset के नाम वाले के लिए सूचक देता है। स्ट्रिंग को आंतरिक रूप से फ़ंक्शन में आवंटित किया गया है और उपयोगकर्ता द्वारा परिवर्तित नहीं किया जाना चाहिए। यदि निष्पादन के दौरान सिस्टम कोर से बाहर चला गया है
bind_textdomain_codeset
, तो रिटर्न वैल्यू NULL है और वैश्विक चर इरनो के अनुसार सेट किया गया है।
आप देशी यूनिकोड वर्ण श्रेणियों का भी उपयोग कर सकते हैं , जो भाषा स्वतंत्र हैं और POSIX कक्षाओं को पूरी तरह से त्याग देती हैं, या शायद आपको पूर्व में कॉल करने के लिए आपको बाद की परिभाषा देने के लिए पर्याप्त जानकारी प्रदान करती है।
जटिलताओं के अलावा, यूनिकोड नई संभावनाएं भी लाता है। एक यह है कि प्रत्येक यूनिकोड वर्ण एक निश्चित श्रेणी का है। आप "अक्षर" श्रेणी से संबंधित किसी एक वर्ण से मेल खा सकते हैं
\p{L}
। आप उस श्रेणी से संबंधित एकल वर्ण से मेल नहीं खा सकते हैं \P{L}
।
फिर, "चरित्र" का वास्तव में अर्थ है "यूनिकोड कोड बिंदु"। \p{L}
श्रेणी "पत्र" में एकल कोड बिंदु से मेल खाता है। यदि आपके इनपुट स्ट्रिंग को à
एन्कोड किया गया है U+0061 U+0300
, तो यह a
लहजे के बिना मेल खाता है । यदि इनपुट को à
एन्कोड किया गया है U+00E0
, तो यह à
एक्सेंट के साथ मेल खाता है । कारण यह है कि दोनों कोड अंक U+0061 (a)
और U+00E0 (à)
श्रेणी "पत्र" में हैं, जबकि U+0300
श्रेणी "चिह्न" में है।
आपको अब समझना चाहिए कि क्यों \P{M}\p{M}*+
के बराबर है \X
।
\P{M}
एक कोड बिंदु से मेल खाता है जो एक संयोजन चिह्न नहीं है, जबकि \p{M}*+
शून्य या अधिक कोड बिंदुओं से मेल खाता है जो संयोजन अंक हैं। किसी भी dicritics सहित एक पत्र से मेल खाने के लिए, का उपयोग करें \p{L}\p{M}*+
। यह अंतिम रेगेक्स हमेशा मैच करेगा à
, भले ही यह एन्कोडेड हो। अपने पास रखने वाला क्वांटिफायर यह सुनिश्चित करता है कि पीछे \P{M}\p{M}*+
जाने वाले संयोजन के निशान के बिना एक गैर-निशान से मेल खाने का कारण नहीं है , जो \X
कभी ऐसा नहीं करेगा।
वही वेबसाइट जो उपरोक्त जानकारी प्रदान करती है, वह Tcl
स्वयं के POSIX -compliant regex कार्यान्वयन की चर्चा करती है जो आपके लक्ष्य को प्राप्त करने का एक और तरीका हो सकता है।
और समाधानों के बीच आखिरी मैं सुझाव दूंगा कि आप LC_COLLATE
फ़ाइल को पूर्ण और इन-ऑर्डर सिस्टम कैरेक्टर मैप के लिए स्वयं पूछ सकते हैं । यह आसानी से नहीं किया जा सकता है, लेकिन मैंने localedef
नीचे दिखाए अनुसार इसे संकलित करने के बाद कुछ सफलता हासिल की:
<LC_COLLATE od -j2K -a -w2048 -v |
tail -n2 |
cut -d' ' -f$(seq -s',' 4 2 2048) |
sed 's/nul\|\\0//g;s/ */ /g;:s;
s/\([^ ]\{1,3\}\) \1/\1/;ts;
s/\(\([^ ][^ ]* *\)\{16\}\)/\1\n/g'
dc1 dc2 dc3 dc4 nak syn etb can c fs c rs c sp ! "
# $ % & ' ( ) * + , - . / 0 1 2
3 4 5 6 7 8 9 : ; < = > ? @ A B
C D E F G H I J K L M N O P Q R
S T U V W X Y Z [ \ ] ^ _ ` a b
c d e f g h i j k l m n o p q r
s t u v w x y z { | } ~ del soh stx etx
eot enq ack bel c ht c vt cr c si dle dc1 del
यह माना जाता है कि वर्तमान में यह दोषपूर्ण है, लेकिन मुझे उम्मीद है कि यह कम से कम संभावना को प्रदर्शित करता है।
प्रथम संकोच पर
strings $_/en_GB
#OUTPUT
int_select "<U0030><U0030>"
...
END LC_TELEPHONE
यह वास्तव में बहुत पसंद नहीं था, लेकिन फिर मैंने copy
पूरी सूची में कमांडिंग को देखना शुरू कर दिया । उपरोक्त फ़ाइल उदाहरण के लिए "en_US"copy
में लगती है , और एक और वास्तविक बड़ी यह है कि ऐसा लगता है कि वे सभी कुछ हद तक साझा हैं ।iso_14651_t1_common
इसका बहुत बड़ा:
strings $_ | wc -c
#OUTPUT
431545
यहाँ परिचय है /usr/share/i18n/locales/POSIX
:
# Territory:
# Revision: 1.1
# Date: 1997-03-15
# Application: general
# Users: general
# Repertoiremap: POSIX
# Charset: ISO646:1993
# Distribution and use is free, also for
# commercial purposes.
LC_CTYPE
# The following is the POSIX Locale LC_CTYPE.
# "alpha" is by default "upper" and "lower"
# "alnum" is by definiton "alpha" and "digit"
# "print" is by default "alnum", "punct" and the <U0020> character
# "graph" is by default "alnum" and "punct"
upper <U0041>;<U0042>;<U0043>;<U0044>;<U0045>;<U0046>;<U0047>;<U0048>;\
<U0049>;<U004A>;<U004B>;<U004C>;<U004D>;<U004E>;<U004F>;
...
आप grep
इस पाठ्यक्रम के माध्यम से कर सकते हैं , लेकिन आप बस:
recode -lf gb
बजाय। आपको कुछ इस तरह मिलेगा:
Dec Oct Hex UCS2 Mne BS_4730
0 000 00 0000 NU null (nul)
1 001 01 0001 SH start of heading (soh)
...
... और अधिक
वहाँ भी luit
टर्मिनल UTF-8 pty
अनुवाद डिवाइस है, जो मुझे लगता है कि UTF-8 समर्थन के बिना XTerms के लिए जाने के बीच कार्य करता है। यह बहुत सारे स्विच को संभालता है - जैसे कि सभी परिवर्तित बाइट्स को फ़ाइल में लॉग करना या -c
साधारण |pipe
फ़िल्टर के रूप में।
मुझे इस बात का कभी एहसास नहीं हुआ कि इसमें बहुत कुछ था - स्थान और चरित्र मानचित्र और वह सब। यह जाहिरा तौर पर एक बहुत बड़ी बात है, लेकिन मुझे लगता है कि यह सब पर्दे के पीछे चलता है। वहाँ हैं - कम से कम मेरे सिस्टम पर - man 3
स्थानीय से संबंधित खोजों के लिए कुछ सौ संबंधित परिणाम।
और यह भी है:
zcat /usr/share/i18n/charmaps/UTF-8*gz | less
CHARMAP
<U0000> /x00 NULL
<U0001> /x01 START OF HEADING
<U0002> /x02 START OF TEXT
<U0003> /x03 END OF TEXT
<U0004> /x04 END OF TRANSMISSION
<U0005> /x05 ENQUIRY
...
यह बहुत लंबे समय तक चलेगा ।
Xlib
कार्यों को संभालने के इस समय के सभी - luit
कि पैकेज का एक हिस्सा है।
Tcl_uni...
कार्यों के रूप में अच्छी तरह से उपयोगी साबित हो सकता है।
बस थोड़ा सा <tab>
पूरा और man
खोज और मैंने इस विषय पर काफी कुछ सीखा है।
के साथ localedef
- आप locales
अपनी I18N
निर्देशिका में संकलन कर सकते हैं । आउटपुट कायरता है, और असाधारण रूप से उपयोगी नहीं है - बिल्कुल भी पसंद नहीं है charmaps
- लेकिन आप कच्चा प्रारूप प्राप्त कर सकते हैं जैसे आप ऊपर निर्दिष्ट करते हैं जैसे मैंने किया था:
mkdir -p dir && cd $_ ; localedef -f UTF-8 -i en_GB ./
ls -l
total 1508
drwxr-xr-x 1 mikeserv mikeserv 30 May 6 18:35 LC_MESSAGES
-rw-r--r-- 1 mikeserv mikeserv 146 May 6 18:35 LC_ADDRESS
-rw-r--r-- 1 mikeserv mikeserv 1243766 May 6 18:35 LC_COLLATE
-rw-r--r-- 1 mikeserv mikeserv 256420 May 6 18:35 LC_CTYPE
-rw-r--r-- 1 mikeserv mikeserv 376 May 6 18:35 LC_IDENTIFICATION
-rw-r--r-- 1 mikeserv mikeserv 23 May 6 18:35 LC_MEASUREMENT
-rw-r--r-- 1 mikeserv mikeserv 290 May 6 18:35 LC_MONETARY
-rw-r--r-- 1 mikeserv mikeserv 77 May 6 18:35 LC_NAME
-rw-r--r-- 1 mikeserv mikeserv 54 May 6 18:35 LC_NUMERIC
-rw-r--r-- 1 mikeserv mikeserv 34 May 6 18:35 LC_PAPER
-rw-r--r-- 1 mikeserv mikeserv 56 May 6 18:35 LC_TELEPHONE
-rw-r--r-- 1 mikeserv mikeserv 2470 May 6 18:35 LC_TIME
फिर od
आप इसे पढ़ सकते हैं - बाइट्स और स्ट्रिंग्स:
od -An -a -t u1z -w12 LC_COLLATE | less
etb dle enq sp dc3 nul nul nul T nul nul nul
23 16 5 32 19 0 0 0 84 0 0 0 >... ....T...<
...
हालांकि यह एक सौंदर्य प्रतियोगिता जीतने से एक लंबा रास्ता तय करता है, जो कि प्रयोग करने योग्य आउटपुट है। और od
जैसा कि आप चाहते हैं कि यह होना चाहिए, के रूप में अच्छी तरह से कॉन्फ़िगर करने योग्य है।
मुझे लगता है कि मैं भी इन के बारे में भूल गया:
perl -mLocale
-- Perl module --
Locale::Codes Locale::Codes::LangFam Locale::Codes::Script_Retired
Locale::Codes::Constants Locale::Codes::LangFam_Codes Locale::Country
Locale::Codes::Country Locale::Codes::LangFam_Retired Locale::Currency
Locale::Codes::Country_Codes Locale::Codes::LangVar Locale::Language
Locale::Codes::Country_Retired Locale::Codes::LangVar_Codes Locale::Maketext
Locale::Codes::Currency Locale::Codes::LangVar_Retired Locale::Maketext::Guts
Locale::Codes::Currency_Codes Locale::Codes::Language Locale::Maketext::GutsLoader
Locale::Codes::Currency_Retired Locale::Codes::Language_Codes Locale::Maketext::Simple
Locale::Codes::LangExt Locale::Codes::Language_Retired Locale::Script
Locale::Codes::LangExt_Codes Locale::Codes::Script Locale::gettext
Locale::Codes::LangExt_Retired Locale::Codes::Script_Codes locale
मैं शायद उनके बारे में भूल गया क्योंकि मैं उन्हें काम करने के लिए नहीं मिला। मैं कभी उपयोग नहीं करता Perl
और मुझे नहीं पता कि मैं ठीक से मॉड्यूल को कैसे लोड करूं। लेकिन man
पन्ने बहुत अच्छे लगते हैं। किसी भी स्थिति में, कुछ मुझे बताता है कि आपको आई और पर्ल की तुलना में कम से कम थोड़ा मुश्किल आई। और फिर, ये पहले से ही मेरे कंप्यूटर पर थे - और मैं कभी भी पर्ल का उपयोग नहीं करता। वहाँ भी विशेष रूप से कुछ है I18N
कि मैं पूरी तरह से अच्छी तरह से जानकर स्क्रॉल किया है मैं उन्हें या तो काम करने के लिए नहीं मिलेगा।
/usr/share/i18n/locales/i18n
... जो निश्चित रूप से यूनिकोड कैरेक्टर डेटाबेस से काफी हद तक आता है। बेशक, यह एक आदेश के लिए अच्छा होगा