সম্ভাব্য শেষ সমাধান
সুতরাং আমি নীচের সমস্ত তথ্য নিয়েছি এবং এটি নিয়ে এসেছি:
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
যে এটা একটি API হয় :
প্রোগ্রামটির নামকরণ recode
এটির পুনরায় পুনর্নির্মাণের পাঠাগারটির কেবল একটি অ্যাপ্লিকেশন। পুনর্নির্মাণের পাঠাগারটি অন্যান্য সি প্রোগ্রামগুলির জন্য পৃথকভাবে উপলব্ধ। রিকডিং লাইব্রেরির সাথে কিছুটা পরিচিতি অর্জনের একটি ভাল উপায় হ'ল recode
প্রোগ্রামটির সাথেই পরিচিত ।
একবার ইনস্টল হয়ে গেলে পুনরায় কোডিং লাইব্রেরিটি ব্যবহার করতে, একটি সি প্রোগ্রামের একটি লাইন থাকা দরকার:
#include <recode.h>
আন্তর্জাতিকভাবে বন্ধুত্বপূর্ণ স্ট্রিং তুলনার জন্য POSIX
এবং C
মানগুলি কার্যটি সংজ্ঞায়িত করে strcoll()
:
strcoll()
ফাংশন দ্বারা স্ট্রিং তীক্ষ্ন তুলনা করব s1
স্ট্রিং দ্বারা নির্দিষ্ট s2
, উভয় বর্তমান লোকেল এর LC_COLLATE বিভাগ যথাযথ হিসেবে ব্যাখ্যা।
strcoll()
ফাংশন errno সফল হলে এর সেটিং পরিবর্তন করবে না।
যেহেতু কোনও ত্রুটি চিহ্নিত করার জন্য কোনও রিটার্নের মান সংরক্ষিত নেই, ত্রুটি পরিস্থিতিগুলি পরীক্ষা করতে চাইলে একটি অ্যাপ্লিকেশনটির 0 থেকে errno সেট করা উচিত, তারপরে কল করুন এবং
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
API ব্যবহার করার জন্য এপিআই ব্যবহার করেছেন বলে উল্লেখ করেছেন । ইউনিকোড চরিত্র এবং ক্লাসগুলির জন্য আপনি পছন্দসই আউটপুট পেতে recode's
ডাম্প-উইথ-নেম চার্সেট ব্যবহার করতে পারেন । এর ম্যানুয়াল থেকে আবার :
উদাহরণস্বরূপ, কমান্ডটি ল্যাটিন -২ থেকে ইউসিএস -২ এrecode l2..full < input
প্রয়োজনীয় রূপান্তরকে বোঝায় , কারণ ডাম্প-সহ নামগুলি কেবল ইউসিএস -২ থেকে সংযুক্ত থাকে । এই জাতীয় ক্ষেত্রে, ডাম্পে মূল ল্যাটিন -2 কোডগুলি প্রদর্শন করে না
, কেবলমাত্র সংশ্লিষ্ট ইউসিএস -2 মান। একটি সহজ উদাহরণ দিতে, কমান্ডrecode
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)
বর্ণনামূলক মন্তব্যটি ইংরেজী এবং এএসসিআইআইতে দেওয়া হয়েছে, তবুও যদি ইংরেজী বিবরণ উপলব্ধ না হয় তবে একটি ফরাসী ভাষায় থাকে তবে লাতিন -১ ব্যবহার করে পরিবর্তে ফরাসি বিবরণ দেওয়া হয়। যাইহোক, যদি
LANGUAGE
বা LANG
এনভায়রনমেন্ট ভেরিয়েবল অক্ষর দিয়ে শুরু হয় ফরাসী ভাষায় , তারপর তালিকা পক্ষপাত ফরাসি যায় যখন উভয় বর্ণনা পাওয়া যায়।
এর অন্তর্ভুক্ত পরীক্ষার ডেটাসেটের সাথে মিলিত উপরের অনুরূপ সিনট্যাক্স ব্যবহার করে আমি নিজের চরিত্রের মানচিত্রটি এর সাথে পেতে পারি:
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-বাইট প্রতিনিধিত্ব করা হয়, তবে এটি আমার লোকেল, ইউটিএফ -8 চারম্যাপ বা না, এএসসিআইআই চরসেট ব্যবহার করে এবং আরও কিছু না। তাই আমি সব পেতে। আমি যদি এটি luit
ফিল্টার না করে চালিয়ে যাই তবে od
এটিকে আবার ঘুরিয়ে দিত এবং আবার একই মানচিত্রটি আবার মুদ্রণ করতে পারে\0400.
যদিও উপরের পদ্ধতিটি নিয়ে দুটি বড় সমস্যা রয়েছে। প্রথমে সিস্টেমের কোলেশন অর্ডার রয়েছে - অ-এসকিআইআই-এর জন্য অক্ষর জন্য মানচিত্রগুলি seq
চরসেটগুলি কেবল উত্সরূপে হয় না , যা আমি মনে করি, সম্ভবত আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার মূল কারণ।
ঠিক আছে, জিএনইউ tr's man
পৃষ্ঠাতে বলা হয়েছে যে এটি ক্রমগুলি [:upper:]
[:lower:]
ক্রম প্রসারিত করবে - তবে এটি খুব বেশি কিছু নয়।
আমি কল্পনা করি যে কিছু ভারী হাতের সমাধান এর সাথে প্রয়োগ করা যেতে পারে sort
তবে এটি ব্যাকএন্ড প্রোগ্রামিং এপিআইয়ের জন্য বরং এক অনর্থক সরঞ্জাম।
recode
এই জিনিসটি সঠিকভাবে করবে, তবে অন্য দিন আপনি প্রোগ্রামটির সাথে খুব বেশি ভালোবাসেন বলে মনে হয় নি। সম্ভবত আজকের সম্পাদনাগুলি এটিতে আরও বন্ধুত্বপূর্ণ আলো ফেলবে বা নাও পারে।
জিএনইউ 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 হয় এবং বৈশ্বিক ভেরিয়েবল এরনো অনুসারে সেট করা থাকে।
আপনি স্থানীয় ইউনিকোড চরিত্রের বিভাগগুলিও ব্যবহার করতে পারেন , যা ভাষা স্বতন্ত্র এবং পুরোপুরি পসিক্স ক্লাসগুলি পূর্বে রাখতে পারে, বা সম্ভবত পূর্ববর্তীটির সাথে সংজ্ঞা দেওয়ার জন্য পর্যাপ্ত তথ্য সরবরাহ করার জন্য ফোন করতে পারে।
জটিলতার পাশাপাশি ইউনিকোড নতুন সম্ভাবনাও নিয়ে আসে। একটি হ'ল প্রতিটি ইউনিকোড অক্ষর একটি নির্দিষ্ট বিভাগের অন্তর্গত । আপনি "অক্ষর" বিভাগের সাথে সম্পর্কিত একটি একক অক্ষরের সাথে মিল রাখতে পারেন
\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}*+
শূন্য বা আরও বেশি কোড পয়েন্টগুলির সাথে মেলে যা চিহ্নগুলি সংযুক্ত করে। কোনও ডায়রিট্রিটিক্স সহ একটি চিঠি মিলাতে, ব্যবহার করুন \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
কমান্ডগুলি লক্ষ্য করা শুরু করি । উপরে ফাইল বলে মনে হয় copy
এ "en_US" উদাহরণস্বরূপ, এবং অন্য বাস্তব বড় এক তারা সব ভাগ মনে হচ্ছে যে কিছু ডিগ্রী 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
অনুবাদ ডিভাইস আমি একটি কুট্নী ছাড়া XTerms জন্য হল UTF-8 সমর্থন করে যে। এটি অনেকগুলি স্যুইচ পরিচালনা করে - যেমন কোনও ফাইলগুলিতে রূপান্তরিত সমস্ত বাইটগুলি লগিং করা বা -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
পৃষ্ঠাগুলি দেখতে বেশ সুন্দর দেখাচ্ছে। যাই হোক না কেন, কোনও কিছু আমাকে বলে যে আপনি পার্ল মডিউলকে কল করতে পেয়েছেন আমার চেয়ে কম কিছুটা কম কঠিন And এবং আবার, এটি আমার কম্পিউটারে ইতিমধ্যে ছিল - এবং আমি এমনকি পার্ল কখনও ব্যবহার করি না। এখানে উল্লেখযোগ্যভাবে কয়েকটি রয়েছে I18N
যে আমি পুরোপুরি ভাল করে জেনে আমি স্ক্রোল করেছিলাম যে আমি সেগুলিও কাজ করতে চাই না।
/usr/share/i18n/locales/i18n
... যা অবশ্যই ইউনিকোড চরিত্রের ডেটাবেস থেকে মূলত আসে। অবশ্যই, এটি একটি কমান্ড