■81234 / inTopicNo.2) |
Re[1]: バイト数から文字数を割り出す |
□投稿者/ 魔界の仮面弁士 (870回)-(2016/09/04(Sun) 16:39:03)
|
■No81233 (よしえ さん) に返信 > Dim r2() As Byte = Encoding.Default.GetBytes(text)
Shift_JIS 環境、すなわち、Encoding.Default が Encoding.GetEncoding(932) 相当を返すという前提で回答しますね。
> そのバイト配列上で特定した文字が > 元の文字列の何文字目にあるか知りたいのですがどうすれば良いですか?
この場合、「.GetString(r2)」で 得られる String 値 (あるいは元となった「text」)に対して、 String.IndexOf メソッドを使うことで調査できます。
String.IndexOf の使用例はこちら。 http://dobon.net/vb/dotnet/string/stringindexof.html
> 全角文字も混ざっている場合にはどうすれば良いですか?
Shift_JIS の場合、先頭から辿っていかないと文字の区切りを判別できません。
たとえば &H81 と &H82 だけで構成されたバイト列があったします。 これらは半角文字では使われず、全角文字でだけ使われるコードですが、 それ単体では全角文字の 1 バイト目か 2 バイト目か判断が付かないのです。
&H81,&H81 → =(全角イコール) &H81,&H82 → ≠(全角ノットイコール) &H82,&H81 → a(全角小文字エー) &H82,&H82 → b(全角小文字ビー)
UTF-8 などは、バイト列の途中からでも文字列の区切り位置がわかるのですけれどね。
|
|