문자의 바이트 수를 세는 시도 | Power Query

2020/6/14 추기:별기사에서 6행으로 쓸 수 있었으므로, 그쪽을 봐 주세요.
문자의 바이트 수를 세는 시도 ~ 그 2 | Power Query

Power Query 그럼 Excel의 LENB 함수 같은 것은 할 수 없는 것일까, 라고 생각해 조사한 결과입니다.
일본어에만 한정해도 예외는 있을 것 같으므로, 문제는 현장에서 대처해 주십시오. 저도 그런 마음으로 사용합니다.
Excel이라면 워크시트 함수의 LENB를 사용할 수 있으므로, 그 쪽이 확실하겠지요.

코드



이번에는 거동의 확인을 중시했기 때문에 함수화하지 않고 보여주었습니다.
그렇다면 함수화에서 무엇이든지하십시오.

q_ 표시 바이트 수 계산
//デバッグのため、引数宣言をコメントアウト
//(TargetTexts as text)=>
let
    //↓デバッグ用。確認できたら、コメントアウトして関数にすればいい。
    TargetTexts ="漢字カンジかんじ",

    //1字ずつばらしたテーブルにする。
    SplittedText = Table.FromValue( Text.ToList( TargetTexts ) ),

    //便宜的にリストにすることでJSONのbinaryに変換でき、バイト数を数えることができる。
    AddJsonColumn  =Table.AddColumn(SplittedText,"JSON",each Json.FromValue( {[Value]} )),
    //JSON既定の両端の括弧とダブルクウォートの計4字を除くため、4を引く。
    半角英数判定 =Table.AddColumn(AddJsonColumn,"半角英数判定",each 1=Binary.Length( [JSON] )-4,type logical),

    //判定用に半角カタカナのリストを得る。
    半角カタカナ群 = List.Transform({65381..65439},Character.FromNumber ),

    半角カタカナ判定 =Table.AddColumn(半角英数判定,"半角カタカナ判定",each List.Contains(半角カタカナ群,[Value]),type logical ), 
    表示幅計算    = Table.AddColumn(半角カタカナ判定, "表示幅",each
                         if List.AnyTrue({[半角英数判定],[半角カタカナ判定]}) then 1
                         else 2
                        ,Int64.Type
                   )
in
    表示幅計算


결과



그리고는 표시폭의 곳을 집계해 주면(자), 바이트수가 됩니다.


보충



JSON의 binary 데이터가 어떻게 되어 있는지, 라는 것에 대한 참고.
반각 영수 이외는 1자리가 되지 않고, 6자리의 코드로 표시되는 것 같습니다. (그 의미는 모릅니다 )

삼키기 코드
let
    Source = "abcde01234あいうえお",
    Custom1 = Json.FromValue( {Source} ),
    Custom2 = Text.FromBinary( Custom1 )
in
    Custom2


위의 코드를 넣으면 이런 느낌이 든다.


참고



UTF8 사이트를 보여주고 도움이되었습니다.
h tp // 오란게후후 c와 ry. 이 m/dn f/u tf-8. HTML

UTF8 문자 코드(영어)
htps : // 니코로. rg / chart / PDF / 울 f00. pdf

좋은 웹페이지 즐겨찾기