実現したいこと
全角と半角が混じった文字列に対して、バイトの位置で指定して文字をスライスしたい。
対象の文字列では、一部のみ抽出しております。
この文字列の場合に、'分'という単語を文字列をスライスする形で抽出したい。
対象の文字列
対象の文字列 data = '0000節分はいつですか1234'
該当のソースコード
python
1data[6:7]
これだと’は’が出力されてしまう。’分’を出力したい。
試したこと
.astype(byte)を試しましたが、エラーとなりました。
byte列に変換するということでしょうか?
bytes(data, encoding='utf-8')[6:7]
バイト列として見たときの位置にある、元の文字列(UTF-8とか)の文字を取得したいってことですよね。
すごく面倒そうな気がしますが。
なぜ位置の指定がバイトなのですか?
調べてみたら、UTF8だと6バイト目は「分」ではなく「節」でしたので、やっぱりなにをしたいのかよくわからなくなりました。
こちらのデータ、もともとのデータ提供元のデータ仕様書がバイト位置で記載されており、その仕様書通り実装したいためです。C言語ですと、全角も2バイトで認識してくれますので、これ以降に文字列があった場合でもバイト位置で文字を取得することができるからです。
bytes(data, encoding='utf-8')[6:7]
こちら実行してみますと、出力がバイトとなってしまいました、、、
> 全角も2バイトで認識してくれますので
ということは、データはUTF-8ではないですね。Shitt_JIS ? euc-jp ? いずれにせよPythonで扱える文字列はUTF-8なので、文字列じゃなくてバイト列として扱うしか無いかと思います。
データの文字コードはShift-JIS(cp932)であり
「C言語ですと、全角も2バイトで認識してくれます」という実行ファイルも
「MBCS」ビルドという認識でよいでしょうか。
そのうえでC言語と同様の動きをさせるためには
「分」を抜き出すには「data[6:7]」という1byte分ではなく
「data[6:8]」と2byte分という指定が妥当と思うのですが、いかがでしょうか。
回答2件
あなたの回答
tips
プレビュー