LINUX.ORG.RU

Charmap в консоли

 ,


1

1

Много «всякой разной» написано про использование комб. клавиш. А чтобы просто посмотреть - ну никак.

Ну да ладно, «напильник» в руки и поехали:

$ cat charmap.sh 
#!/bin/bash

hex2dec()
{
    printf '%d' "0x$1"
}
dec2hex()
{
    printf '%x' "$1"
}
formatvalue()
{
    str="$1"
    num="$2"
    while [ "$(wc -c <<< $str)" -le "$num" ]
    do
        str="0$str"
    done
    printf "%s" "$str"
}
hb="$1"
[ -z $hb ] && hb="0"

xb="$(hex2dec $hb)"
h="$(formatvalue $hb 4)"
printf "$h: "

for ii in {0..2047}
do
    i=$(($ii+$xb))
    hh="$(dec2hex $i)"
    h="$(formatvalue $hh 4)"
    printf "\u$h"
    if (( (i+1) % 64 == 0 ))
    then
        inext="$((i+1))"
        ih="$(dec2hex $inext)"
        fh="$(formatvalue $ih 4)"
        printf "\n$fh : "
    fi
done
printf "\n";

Вуаля.

$ bash charmap.sh 40
0040: @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
0080 : ��������������������������������������������������������������
00c0 : ����������������������������������������������������������������
0100 : ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿ
0140 : ŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ
0180 : ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ
01c0 : ǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ
0200 : ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ
0240 : ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿ
0280 : ʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿ
02c0 : ˀˁ˂˃˄˅ˆˇˈˉˊˋˌˍˎˏːˑ˒˓˔˕˖˗˘˙˚˛˜˝˞˟ˠˡˢˣˤ˥˦˧˨˩˪˫ˬ˭ˮ˯˰˱˲˳˴˵˶˷˸˹˺˻˼˽˾˿
0300 : ̀́̂̃̄̅̆̇̈̉
0340 : ͇͈͉̀́͂̓̈́͆ͅͰͱͲͳʹ͵Ͷͷ͸͹ͺͻͼͽ;Ϳ
0380 : ΀΁΂΃΄΅Ά·ΈΉΊ΋Ό΍ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξο
03c0 : πρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿ
0400 : ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп
0440 : рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ
0480 : Ҁҁ҂҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿ
04c0 : ӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿ
0500 : ԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯ԰ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿ
0540 : ՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտ
0580 : րցւփքօֆևֈ։֊֋֌֍֎֏֐֑֖֚֒֓֔֕֗֘֙־ֿ
05c0 : ׀ׁׂ׃ׅׄ׆ׇ׈׉׊׋׌׍׎׏אבגדהוזחטיךכלםמןנסעףפץצקרשת׫׬׭׮ׯװױײ׳״׵׶׷׸׹׺׻׼׽׾׿
0600 : ؀؁؂؃؄؅؆؇؈؉؊؋،؍؎؏ؘؙؐؑؒؓؔؕؖؗ؛؜؝؞؟ؠءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿ
0640 : ـفقكلمنهوىيًٌٍَُِّْٓٔ٠١٢٣٤٥٦٧٨٩٪٫٬٭ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿ
0680 : ڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙښڛڜڝڞڟڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸڹںڻڼڽھڿ
06c0 : ۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ۔ەۖۗۘۙۚۛۜ۝۞ۣ۟۠ۡۢۤۥۦۧۨ۩۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ۽۾ۿ
0700 : ܀܁܂܃܄܅܆܇܈܉܊܋܌܍܎܏ܐܑܒܓܔܕܖܗܘܙܚܛܜܝܞܟܠܡܢܣܤܥܦܧܨܩܪܫܬܭܮܯܱܴܷܸܹܰܲܳܵܶ
0740 : ݂݄݆݈݀݁݃݅݇݉݋݌ݍݎݏݐݑݒݓݔݕݖݗݘݙݚݛݜݝݞݟݠݡݢݣݤݥݦݧݨݩݪݫݬݭݮݯݰݱݲݳݴݵݶݷݸݹݺݻݼݽݾݿ
0780 : ހށނރބޅކއވމފދތލގޏސޑޒޓޔޕޖޗޘޙޚޛޜޝޞޟޠޡޢޣޤޥަާިީުޫެޭޮޯޱ޲޳޴޵޶޷޸޹޺޻޼޽޾޿
07c0 : ߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߎߏߐߑߒߓߔߕߖߗߘߙߚߛߜߝߞߟߠߡߢߣߤߥߦߧߨߩߪ߲߫߬߭߮߯߰߱߳ߴߵ߶߷߸߹ߺ߻߼߽߾߿
0800 : ࠀࠁࠂࠃࠄࠅࠆࠇࠈࠉࠊࠋࠌࠍࠎࠏࠐࠑࠒࠓࠔࠕࠖࠗ࠘࠙ࠚࠛࠜࠝࠞࠟࠠࠡࠢࠣࠤࠥࠦࠧࠨࠩࠪࠫࠬ࠭࠮࠯࠰࠱࠲࠳࠴࠵࠶࠷࠸࠹࠺࠻࠼࠽࠾࠿
0840 : 

Git: github.com/zvezdochiot/bash-charmap

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

А не думалось, почему оно у вас такое тормозное? Вы в самом деле не знаете, как сделать подсчёт символов в переменной в bash?

Короче:

#!/bin/bash

hb=$1
[[ -z $hb ]] && hb=0

for ii in {0..2047}
do
    if [[ -z "$xb" || $(((ii+xb)%64)) -eq 0 ]]; then
        [[ -z $xb ]] && printf -v xb "%x" 0x$hb || echo
        printf "%04x: " $((ii+xb))
    fi
    printf -v hb "%x" $((ii+xb))
    printf "\u$hb"
done
printf "\n"

vodz ★★★★★
()
Ответ на: комментарий от vodz

Скопировал данный файл, дал права chmod +x и все шрифты, что хотел показать автор мессаги - показались, как и у него в консоле.

blitz
()
Ответ на: комментарий от vodz

почему оно у вас такое тормозное?

почему оно у вас такое тормозное?

Так никто же «по-русски» не пишет, ссылок не оставляет, только всякую фигню копипастят.

Так что сенькс за оптимизацию.

Deleted
()
Ответ на: комментарий от burato

Китайского языка явно не хватает!

Китайского языка явно не хватает!

Я в иероглифах не разбираюсь, так что на вскидку:

$ bash charmap.sh 4000
4000: 䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉䀊䀋䀌䀍䀎䀏䀐䀑䀒䀓䀔䀕䀖䀗䀘䀙䀚䀛䀜䀝䀞䀟䀠䀡䀢䀣䀤䀥䀦䀧䀨䀩䀪䀫䀬䀭䀮䀯䀰䀱䀲䀳䀴䀵䀶䀷䀸䀹䀺䀻䀼䀽䀾䀿
4040 : 䁀䁁䁂䁃䁄䁅䁆䁇䁈䁉䁊䁋䁌䁍䁎䁏䁐䁑䁒䁓䁔䁕䁖䁗䁘䁙䁚䁛䁜䁝䁞䁟䁠䁡䁢䁣䁤䁥䁦䁧䁨䁩䁪䁫䁬䁭䁮䁯䁰䁱䁲䁳䁴䁵䁶䁷䁸䁹䁺䁻䁼䁽䁾䁿
4080 : 䂀䂁䂂䂃䂄䂅䂆䂇䂈䂉䂊䂋䂌䂍䂎䂏䂐䂑䂒䂓䂔䂕䂖䂗䂘䂙䂚䂛䂜䂝䂞䂟䂠䂡䂢䂣䂤䂥䂦䂧䂨䂩䂪䂫䂬䂭䂮䂯䂰䂱䂲䂳䂴䂵䂶䂷䂸䂹䂺䂻䂼䂽䂾䂿
40c0 : 䃀䃁䃂䃃䃄䃅䃆䃇䃈䃉䃊䃋䃌䃍䃎䃏䃐䃑䃒䃓䃔䃕䃖䃗䃘䃙䃚䃛䃜䃝䃞䃟䃠䃡䃢䃣䃤䃥䃦䃧䃨䃩䃪䃫䃬䃭䃮䃯䃰䃱䃲䃳䃴䃵䃶䃷䃸䃹䃺䃻䃼䃽䃾䃿
4100 : 䄀䄁䄂䄃䄄䄅䄆䄇䄈䄉䄊䄋䄌䄍䄎䄏䄐䄑䄒䄓䄔䄕䄖䄗䄘䄙䄚䄛䄜䄝䄞䄟䄠䄡䄢䄣䄤䄥䄦䄧䄨䄩䄪䄫䄬䄭䄮䄯䄰䄱䄲䄳䄴䄵䄶䄷䄸䄹䄺䄻䄼䄽䄾䄿
4140 : 䅀䅁䅂䅃䅄䅅䅆䅇䅈䅉䅊䅋䅌䅍䅎䅏䅐䅑䅒䅓䅔䅕䅖䅗䅘䅙䅚䅛䅜䅝䅞䅟䅠䅡䅢䅣䅤䅥䅦䅧䅨䅩䅪䅫䅬䅭䅮䅯䅰䅱䅲䅳䅴䅵䅶䅷䅸䅹䅺䅻䅼䅽䅾䅿
4180 : 䆀䆁䆂䆃䆄䆅䆆䆇䆈䆉䆊䆋䆌䆍䆎䆏䆐䆑䆒䆓䆔䆕䆖䆗䆘䆙䆚䆛䆜䆝䆞䆟䆠䆡䆢䆣䆤䆥䆦䆧䆨䆩䆪䆫䆬䆭䆮䆯䆰䆱䆲䆳䆴䆵䆶䆷䆸䆹䆺䆻䆼䆽䆾䆿
41c0 : 䇀䇁䇂䇃䇄䇅䇆䇇䇈䇉䇊䇋䇌䇍䇎䇏䇐䇑䇒䇓䇔䇕䇖䇗䇘䇙䇚䇛䇜䇝䇞䇟䇠䇡䇢䇣䇤䇥䇦䇧䇨䇩䇪䇫䇬䇭䇮䇯䇰䇱䇲䇳䇴䇵䇶䇷䇸䇹䇺䇻䇼䇽䇾䇿
4200 : 䈀䈁䈂䈃䈄䈅䈆䈇䈈䈉䈊䈋䈌䈍䈎䈏䈐䈑䈒䈓䈔䈕䈖䈗䈘䈙䈚䈛䈜䈝䈞䈟䈠䈡䈢䈣䈤䈥䈦䈧䈨䈩䈪䈫䈬䈭䈮䈯䈰䈱䈲䈳䈴䈵䈶䈷䈸䈹䈺䈻䈼䈽䈾䈿
4240 : 䉀䉁䉂䉃䉄䉅䉆䉇䉈䉉䉊䉋䉌䉍䉎䉏䉐䉑䉒䉓䉔䉕䉖䉗䉘䉙䉚䉛䉜䉝䉞䉟䉠䉡䉢䉣䉤䉥䉦䉧䉨䉩䉪䉫䉬䉭䉮䉯䉰䉱䉲䉳䉴䉵䉶䉷䉸䉹䉺䉻䉼䉽䉾䉿
4280 : 䊀䊁䊂䊃䊄䊅䊆䊇䊈䊉䊊䊋䊌䊍䊎䊏䊐䊑䊒䊓䊔䊕䊖䊗䊘䊙䊚䊛䊜䊝䊞䊟䊠䊡䊢䊣䊤䊥䊦䊧䊨䊩䊪䊫䊬䊭䊮䊯䊰䊱䊲䊳䊴䊵䊶䊷䊸䊹䊺䊻䊼䊽䊾䊿
42c0 : 䋀䋁䋂䋃䋄䋅䋆䋇䋈䋉䋊䋋䋌䋍䋎䋏䋐䋑䋒䋓䋔䋕䋖䋗䋘䋙䋚䋛䋜䋝䋞䋟䋠䋡䋢䋣䋤䋥䋦䋧䋨䋩䋪䋫䋬䋭䋮䋯䋰䋱䋲䋳䋴䋵䋶䋷䋸䋹䋺䋻䋼䋽䋾䋿
4300 : 䌀䌁䌂䌃䌄䌅䌆䌇䌈䌉䌊䌋䌌䌍䌎䌏䌐䌑䌒䌓䌔䌕䌖䌗䌘䌙䌚䌛䌜䌝䌞䌟䌠䌡䌢䌣䌤䌥䌦䌧䌨䌩䌪䌫䌬䌭䌮䌯䌰䌱䌲䌳䌴䌵䌶䌷䌸䌹䌺䌻䌼䌽䌾䌿
4340 : 䍀䍁䍂䍃䍄䍅䍆䍇䍈䍉䍊䍋䍌䍍䍎䍏䍐䍑䍒䍓䍔䍕䍖䍗䍘䍙䍚䍛䍜䍝䍞䍟䍠䍡䍢䍣䍤䍥䍦䍧䍨䍩䍪䍫䍬䍭䍮䍯䍰䍱䍲䍳䍴䍵䍶䍷䍸䍹䍺䍻䍼䍽䍾䍿
4380 : 䎀䎁䎂䎃䎄䎅䎆䎇䎈䎉䎊䎋䎌䎍䎎䎏䎐䎑䎒䎓䎔䎕䎖䎗䎘䎙䎚䎛䎜䎝䎞䎟䎠䎡䎢䎣䎤䎥䎦䎧䎨䎩䎪䎫䎬䎭䎮䎯䎰䎱䎲䎳䎴䎵䎶䎷䎸䎹䎺䎻䎼䎽䎾䎿
43c0 : 䏀䏁䏂䏃䏄䏅䏆䏇䏈䏉䏊䏋䏌䏍䏎䏏䏐䏑䏒䏓䏔䏕䏖䏗䏘䏙䏚䏛䏜䏝䏞䏟䏠䏡䏢䏣䏤䏥䏦䏧䏨䏩䏪䏫䏬䏭䏮䏯䏰䏱䏲䏳䏴䏵䏶䏷䏸䏹䏺䏻䏼䏽䏾䏿
4400 : 䐀䐁䐂䐃䐄䐅䐆䐇䐈䐉䐊䐋䐌䐍䐎䐏䐐䐑䐒䐓䐔䐕䐖䐗䐘䐙䐚䐛䐜䐝䐞䐟䐠䐡䐢䐣䐤䐥䐦䐧䐨䐩䐪䐫䐬䐭䐮䐯䐰䐱䐲䐳䐴䐵䐶䐷䐸䐹䐺䐻䐼䐽䐾䐿
4440 : 䑀䑁䑂䑃䑄䑅䑆䑇䑈䑉䑊䑋䑌䑍䑎䑏䑐䑑䑒䑓䑔䑕䑖䑗䑘䑙䑚䑛䑜䑝䑞䑟䑠䑡䑢䑣䑤䑥䑦䑧䑨䑩䑪䑫䑬䑭䑮䑯䑰䑱䑲䑳䑴䑵䑶䑷䑸䑹䑺䑻䑼䑽䑾䑿
4480 : 䒀䒁䒂䒃䒄䒅䒆䒇䒈䒉䒊䒋䒌䒍䒎䒏䒐䒑䒒䒓䒔䒕䒖䒗䒘䒙䒚䒛䒜䒝䒞䒟䒠䒡䒢䒣䒤䒥䒦䒧䒨䒩䒪䒫䒬䒭䒮䒯䒰䒱䒲䒳䒴䒵䒶䒷䒸䒹䒺䒻䒼䒽䒾䒿
44c0 : 䓀䓁䓂䓃䓄䓅䓆䓇䓈䓉䓊䓋䓌䓍䓎䓏䓐䓑䓒䓓䓔䓕䓖䓗䓘䓙䓚䓛䓜䓝䓞䓟䓠䓡䓢䓣䓤䓥䓦䓧䓨䓩䓪䓫䓬䓭䓮䓯䓰䓱䓲䓳䓴䓵䓶䓷䓸䓹䓺䓻䓼䓽䓾䓿
4500 : 䔀䔁䔂䔃䔄䔅䔆䔇䔈䔉䔊䔋䔌䔍䔎䔏䔐䔑䔒䔓䔔䔕䔖䔗䔘䔙䔚䔛䔜䔝䔞䔟䔠䔡䔢䔣䔤䔥䔦䔧䔨䔩䔪䔫䔬䔭䔮䔯䔰䔱䔲䔳䔴䔵䔶䔷䔸䔹䔺䔻䔼䔽䔾䔿
4540 : 䕀䕁䕂䕃䕄䕅䕆䕇䕈䕉䕊䕋䕌䕍䕎䕏䕐䕑䕒䕓䕔䕕䕖䕗䕘䕙䕚䕛䕜䕝䕞䕟䕠䕡䕢䕣䕤䕥䕦䕧䕨䕩䕪䕫䕬䕭䕮䕯䕰䕱䕲䕳䕴䕵䕶䕷䕸䕹䕺䕻䕼䕽䕾䕿
4580 : 䖀䖁䖂䖃䖄䖅䖆䖇䖈䖉䖊䖋䖌䖍䖎䖏䖐䖑䖒䖓䖔䖕䖖䖗䖘䖙䖚䖛䖜䖝䖞䖟䖠䖡䖢䖣䖤䖥䖦䖧䖨䖩䖪䖫䖬䖭䖮䖯䖰䖱䖲䖳䖴䖵䖶䖷䖸䖹䖺䖻䖼䖽䖾䖿
45c0 : 䗀䗁䗂䗃䗄䗅䗆䗇䗈䗉䗊䗋䗌䗍䗎䗏䗐䗑䗒䗓䗔䗕䗖䗗䗘䗙䗚䗛䗜䗝䗞䗟䗠䗡䗢䗣䗤䗥䗦䗧䗨䗩䗪䗫䗬䗭䗮䗯䗰䗱䗲䗳䗴䗵䗶䗷䗸䗹䗺䗻䗼䗽䗾䗿
4600 : 䘀䘁䘂䘃䘄䘅䘆䘇䘈䘉䘊䘋䘌䘍䘎䘏䘐䘑䘒䘓䘔䘕䘖䘗䘘䘙䘚䘛䘜䘝䘞䘟䘠䘡䘢䘣䘤䘥䘦䘧䘨䘩䘪䘫䘬䘭䘮䘯䘰䘱䘲䘳䘴䘵䘶䘷䘸䘹䘺䘻䘼䘽䘾䘿
4640 : 䙀䙁䙂䙃䙄䙅䙆䙇䙈䙉䙊䙋䙌䙍䙎䙏䙐䙑䙒䙓䙔䙕䙖䙗䙘䙙䙚䙛䙜䙝䙞䙟䙠䙡䙢䙣䙤䙥䙦䙧䙨䙩䙪䙫䙬䙭䙮䙯䙰䙱䙲䙳䙴䙵䙶䙷䙸䙹䙺䙻䙼䙽䙾䙿
4680 : 䚀䚁䚂䚃䚄䚅䚆䚇䚈䚉䚊䚋䚌䚍䚎䚏䚐䚑䚒䚓䚔䚕䚖䚗䚘䚙䚚䚛䚜䚝䚞䚟䚠䚡䚢䚣䚤䚥䚦䚧䚨䚩䚪䚫䚬䚭䚮䚯䚰䚱䚲䚳䚴䚵䚶䚷䚸䚹䚺䚻䚼䚽䚾䚿
46c0 : 䛀䛁䛂䛃䛄䛅䛆䛇䛈䛉䛊䛋䛌䛍䛎䛏䛐䛑䛒䛓䛔䛕䛖䛗䛘䛙䛚䛛䛜䛝䛞䛟䛠䛡䛢䛣䛤䛥䛦䛧䛨䛩䛪䛫䛬䛭䛮䛯䛰䛱䛲䛳䛴䛵䛶䛷䛸䛹䛺䛻䛼䛽䛾䛿
4700 : 䜀䜁䜂䜃䜄䜅䜆䜇䜈䜉䜊䜋䜌䜍䜎䜏䜐䜑䜒䜓䜔䜕䜖䜗䜘䜙䜚䜛䜜䜝䜞䜟䜠䜡䜢䜣䜤䜥䜦䜧䜨䜩䜪䜫䜬䜭䜮䜯䜰䜱䜲䜳䜴䜵䜶䜷䜸䜹䜺䜻䜼䜽䜾䜿
4740 : 䝀䝁䝂䝃䝄䝅䝆䝇䝈䝉䝊䝋䝌䝍䝎䝏䝐䝑䝒䝓䝔䝕䝖䝗䝘䝙䝚䝛䝜䝝䝞䝟䝠䝡䝢䝣䝤䝥䝦䝧䝨䝩䝪䝫䝬䝭䝮䝯䝰䝱䝲䝳䝴䝵䝶䝷䝸䝹䝺䝻䝼䝽䝾䝿
4780 : 䞀䞁䞂䞃䞄䞅䞆䞇䞈䞉䞊䞋䞌䞍䞎䞏䞐䞑䞒䞓䞔䞕䞖䞗䞘䞙䞚䞛䞜䞝䞞䞟䞠䞡䞢䞣䞤䞥䞦䞧䞨䞩䞪䞫䞬䞭䞮䞯䞰䞱䞲䞳䞴䞵䞶䞷䞸䞹䞺䞻䞼䞽䞾䞿
47c0 : 䟀䟁䟂䟃䟄䟅䟆䟇䟈䟉䟊䟋䟌䟍䟎䟏䟐䟑䟒䟓䟔䟕䟖䟗䟘䟙䟚䟛䟜䟝䟞䟟䟠䟡䟢䟣䟤䟥䟦䟧䟨䟩䟪䟫䟬䟭䟮䟯䟰䟱䟲䟳䟴䟵䟶䟷䟸䟹䟺䟻䟼䟽䟾䟿
4800 :
Deleted
()
Ответ на: комментарий от vodz

Небольшая доводка

Небольшая доводка.

Начальное смещение тоже шестнадцатеричное:

$ cat charmap-opt.sh 
#!/bin/bash

printf "\n\t\tConsole CharMap\t\t0.20180105\n"

hb=$1
[[ -z $hb ]] && hb=0
printf -v xb "%d" "0x$hb"

for ii in {0..2047}
do
    if [[ $(((ii+xb)%64)) -eq 0 ]]
    then
        printf "\n%04x: " $((ii+xb))
    fi
    printf -v hb "%x" $((ii+xb))
    printf "\u$hb"
done
printf "\n"
$ bash charmap-opt.sh 4000

		Console CharMap		0.20180105

4000: 䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉䀊䀋䀌䀍䀎䀏䀐䀑䀒䀓䀔䀕䀖䀗...
...
Deleted
()
Ответ на: Небольшая доводка от Deleted

Да, там у меня была плюха, надо в первом printf заменить «x» на «d». В вашем последнем варианте не будет пропечатан стартовый код, если он не кратен 64. Так что правильнее и красивее так:

#!/bin/bash

hb=${1:-0}
xb=
for ii in {0..2047}
do
    if [[ $(((ii+xb)%64)) -eq 0 ]]; then
        [[ -z $xb ]] && printf -v xb "%d" 0x$hb || echo
        printf "%04x: " $((ii+xb))
    fi
    printf -v hb "%x" $((ii+xb))
    printf "\u$hb"
done
echo

vodz ★★★★★
()
Ответ на: комментарий от vodz

правильнее и красивее

Так что правильнее и красивее так:

Правильнее - бесспорно, красивее - может быть, здесь я не уверен, проще для понимания - нет. Не сложно, конечно. Но всё таки, так проще для понимания:

$ cat charmap.sh 
#!/bin/bash

printf "\n\t\tConsole CharMap\t\t0.20180105\n"

hb=$1
[[ -z $hb ]] && hb=0
printf -v xb "%d" "0x$hb"

for ii in {0..2047}
do
    if [[ $ii -eq 0 || $(((ii+xb)%64)) -eq 0 ]]
    then
        printf "\n%04x: " $((ii+xb))
    fi
    printf -v hb "%x" $((ii+xb))
    printf "\u$hb"
done
printf "\n"
Deleted
()
Ответ на: правильнее и красивее от Deleted

проще для понимания - нет.

Вообще-то в коде ${1:-0} трудности в понимании могут быть только у стариков вроде меня, которые изучали shell-ы, у которых не было синтаксиса по изменению переменной в ${var}. А у вас трудности не в понимании, судя по изначальному коду, а просто не в незнании shell-а.

Если уж говорить о правильности, то можете озадачиться верхним пределом вашего for. У меня вот однобайтная кодировка, никакого смысла выполнять этот цикл выше 255 нет. В многобайтной тоже непонятно, почему именно 2047.

Первое что бросается в глаза, почему аргумент именно шестнадцатеричный? Я вот начинал с PDP-11, там удобно всё было в восьмеричной делать :))) Это я намекаю, что надо первый аргумент делать опцией, в том числе и типа так "-c C": вдруг кому удобнее посмотреть какой следующий код для указанной буквы в качестве аргумента.

vodz ★★★★★
()
Ответ на: комментарий от vodz

однобайтная кодировка

У меня вот однобайтная кодировка

Хм.

Строка

    printf "\u$hb"
предполагает юникод. Как же быть, если допустим KOI-8R?

Может можно временное переключение локали?

Deleted
()
Ответ на: однобайтная кодировка от Deleted

Хм. Строка предполагает юникод.

Нет, оно печатает любой символ с шестнадцатеричным и даже не ругается при koi8 на коды больше 255.

Как же быть, если допустим KOI-8R?

Я не силён в неюникодных китайско-японских кодировках, там тоже вроде какая-та пакость есть с многобайтная. Так что если раскопаете правильну методику определения одно-многобайтности у кодировки, то и печатать надо в необходимом диаппазоне.

Может можно временное переключение локали?

Нафиг такое счастье с «п©я─п╦п╡п╣я┌». Вон уже дожили, tor браузер уже глючит с koi8, если символы имя файла не бывают к koi8, то оно сохранят в «привет.part», а потом говорит, что не могу переименовать в «п©я─п╦п╡п╣я┌»... И непонятно, толи докачало, толи нет.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Нафиг такое счастье

Нафиг такое счастье с «п©я─п╦п╡п╣я┌».

CharMap нужен собственно для текстов, а не самой консоли. Тексты могут быть в UTF-8 даже если консоль KOI-8R.

Может вывод в отдельную консоль с UTF-8 как-нибудь?

Deleted
()
Ответ на: Нафиг такое счастье от Deleted

CharMap нужен собственно для текстов, а не самой консоли.

Бред какой-то...

Если мне понадобится сделать что-то в другой локали, я и выполню это в другой локали. Самая умная программа, которая захочет сделать это самостоятельно, без спроса — отправится в мусорку.

vodz ★★★★★
()
Ответ на: комментарий от vodz

без спроса

Самая умная программа, которая захочет сделать это самостоятельно, без спроса — отправится в мусорку.

Почему «самостоятельно» и почему «программа».

Скрипт как скрипт. Что в нём укажешь сделать, то и получишь.

Deleted
()
Ответ на: комментарий от vodz

У меня вот однобайтная кодировка

Eddy_Em, ты ли это?

dexpl ★★★★★
()
Ответ на: комментарий от vodz

Для однобайтных кодировок есть другие реализации. Например, эта:

// under GNU GPLv3
#include <stdio.h>

int hexnumcnt(int indx)
{
        if (indx < 12)
                return 46 + indx;
        else
                return 85 + indx;
}

int main(int argc, char **argv)
{
        int i, j, hl, vl, cl;
        if (argc > 1) {
                hl = 128;
                vl = 129;
                cl = 138;
        } else {
                hl = 45;
                vl = 124;
                cl = 43;
        }
        for (j = 0; j < 18; j++) {
                for (i = 0; i < 18; i++) {
                        if (i == 0 && j == 0)
                                putchar(32);
                        if (j == 1)
                                if (i != 1)
                                        putchar(hl);
                                else
                                        putchar(cl);
                        if (i == 1 && j != 1)
                                putchar(vl);
                        if (j == 0 && i > 1)
                                putchar(hexnumcnt(i));
                        if (i == 0 && j > 1)
                                putchar(hexnumcnt(j));
                        if (j == 2 && i == 12)
                                continue;
                        if (i > 1 && j > 1 && (16 * j + i - 34) != 11)
                                putchar(16 * j + i - 34);
                }
                putchar(10);
        }
}
> ./asciitbl_oldcmplxv
 |0123456789abcdef
-+----------------
0|
1|
2| !"#$%&'()*+,-./
3|0123456789:;<=>?
4|@ABCDEFGHIJKLMNO
5|PQRSTUVWXYZ[\]^_
6|`abcdefghijklmno
7|pqrstuvwxyz{|}~
8|─│┌┐└┘├┤┬┴┼▀▄█▌▐
9|░▒▓⌠■∙√≈≤≥ ⌡°²·÷
a|═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞
b|╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©
c|юабцдефгхийклмно
d|пярстужвьызшэщчъ
e|ЮАБЦДЕФГХИЙКЛМНО
f|ПЯРСТУЖВЬЫЗШЭЩЧЪ
>

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Для однобайтных кодировок есть другие реализации.

Для чего вы вот это написали?

Я вот правил код ТСа в своём редакторе (ну а как же, как может уважать себя программист, не написав свой редактор?), и у меня там есть встроенная ascii-table. И код покажет символа под курсором в dec/hex/oct и подвигать по таблице потом можно.

vodz ★★★★★
()
Ответ на: комментарий от vodz

А разве сабжевый скрипт не тоже самое делает, только конкретно для юникода? А у меня, вот, конкретно для однобайтных кодировок.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

А разве сабжевый скрипт не тоже самое делает, только конкретно для юникода?

Тут сегодня что, топик странных вопросов? Ну делает, и что?

А у меня, вот, конкретно для однобайтных кодировок.

А у ТСа идёт изучение bash-а, в чём я ему помог. А вы тут какой-то офтопик развели не по делу.

vodz ★★★★★
()
Ответ на: комментарий от vodz

офтопик развели

Об этом я упоминал с самого начала. «По-русски» никто не пишет, ссылок не дает. Иди Вася, изобретай велосипед.

Deleted
()
Ответ на: комментарий от vodz

Вы так говорите, как будто бы кто-то читает темы не по диагонали, и обязательно вычисляет кто что изучает и кто кому помогает.

Для читающего по диагонали эта тема выглядит как релиз скрипта, плюс сожаление по тому поводу, что он не умеет работать с однобайтными кодировками.

А у меня как раз давно на полке лежит софтина с таким же функционалом, но для однобайтных кодировок. Ну и что, мне жаль что ли поделиться с теми, кому она нужна? Вот, делюсь.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

на полке

у меня как раз давно на полке лежит софтина с таким же функционалом

Так какого ... она на полке то лежит. ЛОР вроде как для того, чтоб не приходилось вечно по полкам да заначкам шарить. А я удивляюсь потом, что всё «по-нерусски» да без ссылок.

Deleted
()
Ответ на: комментарий от Deleted

Проскакивает, руки печатают быстрее, чем голова успевает думать.

Deleted
()
Ответ на: комментарий от saahriktu

Вы так говорите, как будто бы кто-то читает темы не по диагонали, и обязательно вычисляет кто что изучает и кто кому помогает.

Вот вы как сюда попали? Я — по тегу «bash». А вы по поиску «однобайтная кодировка»?

Для читающего по диагонали эта тема выглядит как релиз скрипта

Потому я на копирайт не напрашиваюсь, всё равно никто не читает. :) А ТСу следовало бы подправить первый пост, ибо он просто ужасный. То что у ТСов нет возможности тереть офтопики в своих темах — печально, а вы этм радостно пользуетесь и злоупотребляете.

А у меня как раз давно на полке лежит софтина с таким же функционалом

Да этот «функционал» та еще фигня. Символы впритирку, младшие коды хорошо бы рисовать вообще в кодировке «\a\b\t\r\n», шапку с кодами сделать... Это я про стандартные ascii-table функционал намекаю, как же без красоты то пользоваться. Посмотришь на такой ужас и рук так и тянется переписать.

vodz ★★★★★
()
Ответ на: комментарий от vodz

та еще фигня

Хорош письками мериться. Ссылки на код выкладывайте, а там поглядим. (Сам код выкладывать не надо, только ссылки).

Deleted
()
Ответ на: та еще фигня от Deleted

Хорош письками мериться.

А чё? На bash и на Cи я пишу быстро и легко.

Ссылки на код выкладывайте, а там поглядим.

Редактор свой я не выкладываю, он устарел 20 лет как и пользоваться я могу только сам, ибо привык. А в чём проблема ваш скрипт то улучшить? Ну вот для затравки:

#!/bin/bash

hb=${1:-0}
printf -v xb "%d" 0x$hb
xb=
for ((i=xb; i<=255; i++)); do
    if [[ $i -eq $xb || $((i%16)) -eq 0 ]]; then
        printf "\n%04x:" $i
    fi
    if ((i<0x20)); then
        printf -v hb "%x" $((i+0x40))
        printf " ^\u$hb"
    else
        printf -v hb "%x" $i
        printf " \u$hb "
    fi
done
echo

vodz ★★★★★
()
Ответ на: комментарий от vodz

Вот вы как сюда попали? Я — по тегу <<bash>>. А вы по поиску <<однобайтная кодировка>>?

Я не хожу по тегам. Я хожу по заголовкам тем. А заголовок темы здесь: «Charmap в консоли».

Да этот <<функционал>> та еще фигня.

Кому как. У разных людей разные представления о форматировании. Собственно, все эти <<\a\b\t\r\n>> - это не то, что видит пользователь при выводе этих кодов. Это условные «escape sequences» для программ и скриптов. Поэтому, здесь по-хорошему нужны 2 таблицы. Одна - видимых символов. Что и реализовано в этой программе. И таблица служебных ASCII кодов. И её можно хранить и в текстовом файле, поскольку она неизменна для всех кодировок, которые совместимы с ASCII. Вот такая таблица:

ASCII control characters

   Dec | Hex | Binary   | Character | Description
   ----+-----+----------+-----------+----------------
   0   | 00  | 00000000 | NUL       | null
   1   | 01  | 00000001 | SOH       | start of header
   2   | 02  | 00000010 | STX       | start of text
   3   | 03  | 00000011 | ETX       | end of text
   4   | 04  | 00000100 | EOT       | end of transmission
   5   | 05  | 00000101 | ENQ       | enquiry
   6   | 06  | 00000110 | ACK       | acknowledge
   7   | 07  | 00000111 | BEL       | bell
   8   | 08  | 00001000 | BS        | backspace
   9   | 09  | 00001001 | HT        | horizontal tab
   10  | 0A  | 00001010 | LF        | line feed
   11  | 0B  | 00001011 | VT        | vertical tab
   12  | 0C  | 00001100 | FF        | form feed
   13  | 0D  | 00001101 | CR        | enter / carriage return
   14  | 0E  | 00001110 | SO        | shift out
   15  | 0F  | 00001111 | SI        | shift in
   16  | 10  | 00010000 | DLE       | data link escape
   17  | 11  | 00010001 | DC1       | device control 1
   18  | 12  | 00010010 | DC2       | device control 2
   19  | 13  | 00010011 | DC3       | device control 3
   20  | 14  | 00010100 | DC4       | device control 4
   21  | 15  | 00010101 | NAK       | negative acknowledge
   22  | 16  | 00010110 | SYN       | synchronize
   23  | 17  | 00010111 | ETB       | end of trans. block
   24  | 18  | 00011000 | CAN       | cancel
   25  | 19  | 00011001 | EM        | end of medium
   26  | 1A  | 00011010 | SUB       | substitute
   27  | 1B  | 00011011 | ESC       | escape
   28  | 1C  | 00011100 | FS        | file separator
   29  | 1D  | 00011101 | GS        | group separator
   30  | 1E  | 00011110 | RS        | record separator
   31  | 1F  | 00011111 | US        | unit separator
   127 | 7F  | 01111111 | DEL       | delete

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Вот такая таблица:

Эта таблица даже 35 лет назад была уже устаревшей, ибо сама IBM уже тогда забила на свои телеграфы, а всякие ^S/^Q уже получили всеобщее признание в качестве XON/XOFF. А «\t\n...» — это именно пользователькие мнемоники, которые теперь (ах, да, я всё забываю, что моё «теперь» для многих тут означает когда ещё в проекте их не было) даже bash поддерживает, ибо они и кодируют что эти коды будут делать, сейчас.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.