1バイト文字と2バイト文字が混在している文字列にて、
左から○文字を切り出したとき、
例)
a:='あいうえおABCDE';
ShowMessage(LeftStr(a , 6)); ⇒あいう
b:='ABCDEあいうえお';
ShowMessage(LeftStr(b , 6)); ⇒ABCDE・
全角文字の途中で切り出されると、
お尻が文字化けします。(2つめのパターン)
お尻が文字化けする場合には、
その1バイトを無視させたいのですが、どうしたら良いのでしょうか。
(2つめのパターンにおいて、 ABCDE としたい)
私はByteType関数を利用して判定し、文字化けしないような
関数を作って利用しています。
ByteType関数、できました。
ありがとうございました。
//--------------------------------------------------------
case ByteType(RightStr(Temp,1) ,1) of
{ 半角 }
mbSingleByte :
begin
//何もしない
end;
{ 全角の1バイト目 }
mbLeadByte :
begin
Temp := LeftStr(Temp , Length(Temp) -1); //半角1文字分カット
end;
{ 全角の2バイト目 }
mbTrailByte :
begin
//何もしない
end;
else
//何もしない
end; { case }
WideStringってのを使えばバイトタイプ気にしないで扱えます。
時代的にはこっちの方が良いとおもいます。
procedure TForm1.Button1Click(Sender: TObject);
var
ws:widestring;
begin
ws:='ABCDEあいうえお';
caption:=Copy(ws,3,Length(ws));
end;
ツイート | ![]() |