質問: ### 前提・実現したいこと ``` Power shellのスクリプトで、ある文字列の50バイト目を マルチバイト文字かシングルバイト文字か判定する方法を知りたく質問いたしました。 ``` ### 該当のソースコード ``` function get-substringbytes([String]$Text,[int]$StartIndex=0,[int]$Length=0){ $enc=[System.Text.Encoding]::Default $bytes=$enc.GetBytes($Text) return $enc.GetString($bytes,$StartIndex,$Length) } ``` ### 発生している問題・エラーメッセージ ``` 上記の「該当のソースコード」の欄に記載したfunctionを使用して、引数に渡した文字列を50バイトずつ切り出すという処理を行っているのですが、 50バイト目のところに、マルチバイト文字が入ってしまうと当然ながら、正常に文字を切り出すことができませんでした。 --------------------------------------------------------------------------- 実行例) > get-substringbytes "あいうえおかきくけこさしすせそたちつてとなにぬねxの" 0 50 あいうえおかきくけこさしすせそたちつてとなにぬねx・ --------------------------------------------------------------------------- そこで50バイト目の文字がマルチバイト文字の時だけ、49バイト目まで取得するように変更しようかと考えたのですが、 Power shellで"50バイト目の文字がマルチバイト文字かどうか"の判定を行えるのかわからず質問させていただきました。 ``` ### 補足情報(言語/FW/ツール等のバージョンなど) ``` Powershellバージョン ------------------------------- > $PSVersionTable.psversion Major Minor Build Revision ----- ----- ----- -------- 2 0 -1 -1 ------------------------------- ```
回答: ご回答いただきありがとうございます。 50番目と51番目で要素でbyte配列を作って文字列に変換を試してみたいと思います。