DEKOさん、こんにちは。
関数名はそのものズバリなんですが、非推奨のByteToCharIndex()でも
ByteToCharIndex('AあBC', 3)で3が返ってきます。
用意されたバッファ(この場合3バイト)に確実に格納できる文字列を
取得したいので、これで2が返って欲しいんです。
つまり指定されたバイト数の最後の部分で、文字コードの一部だけになった場合
その最後の文字は含まないようにしたいわけです。
推奨されているElementToCharIndex()で上記の動作をするのは分かるんですが。
とりあえず使用頻度も文字数も少ないので、下記の感じでゴリゴリ回してます。
function MBTrimming(const s: string, ByteCount: integer): string;
var
len: integer;
begin
len := ByteCount;
Result := Copy(s, 1, len);
while TEncoding.GetEncode(932).GetByteCount(Result) > ByteCount do
//とりあえずコードはShiftJISで
begin
Dec(len);
Result := Copy(s, 1, len);
end;
end;
これならUTF-8でもいけそうな感じですのでちょっと様子を見てみます。
ありがとうございました。
MLホームページ:
http://www.freeml.com/delphi-users
----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pE7ia
------------------------------------------------------[freeml byGMO]--