string変数の文字数指定

81 views
Skip to first unread message

中村

unread,
Jul 11, 2023, 3:59:28 AM7/11/23
to Japan RAD Studio User Group
こんにちは、中村と申します。

ANSI版Delphiのときは、String[10]としたとき10バイト分のShortString変数として定義して、これに10バイト以上の文字を入れようとしたときに溢れた分は勝手に切られたのですが、同じようなことはUNICODE版でも可能でしょうか。
UnicodeString[10]みたいなイメージで10文字入れられる文字列変数として定義したいです。

初歩的な質問で申し訳ないですが、よろしくお願いします。

Hikaru Fukushi

unread,
Jul 11, 2023, 4:27:07 AM7/11/23
to radstu...@googlegroups.com
中村さん、こんにちは。福士です。

> ANSI版Delphiのときは、String[10]としたとき10バイト分のShortString変数として定義して、これに10バイト以上の文字を入れようとしたときに溢れた分は勝手に切られたのですが、同じようなことはUNICODE版でも可能でしょうか。
> UnicodeString[10]みたいなイメージで10文字入れられる文字列変数として定義したいです。

ANSI版DelphiのString[10]はAnsiStringではなく短い文字列になります。

https://docwiki.embarcadero.com/RADStudio/ja/%E6%96%87%E5%AD%97%E5%88%97%E5%9E%8B%EF%BC%88Delphi%EF%BC%89#.E7.9F.AD.E3.81.84.E6.96.87.E5.AD.97.E5.88.97

残念ながらUnicode版の『短い文字列』は存在しません。

---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fuk...@tts-inc.co.jp

中村

unread,
Jul 11, 2023, 8:51:48 PM7/11/23
to Japan RAD Studio User Group
中村です。福士さん、ありがとうございます。

> 残念ながらUnicode版の『短い文字列』は存在しません。

そうなんですね、残念です。高度なレコード型とかクラスとかで代替作れないか考えてみます。
データベースの文字列カラムサイズに合わせて、Stringフィールドのサイズというか文字数を制限したかったのですが。

2023年7月11日火曜日 17:27:07 UTC+9 Hikaru Fukushi:

Hikaru Fukushi

unread,
Jul 11, 2023, 9:37:11 PM7/11/23
to radstu...@googlegroups.com
中村さん、こんにちは。福士です。

> データベースの文字列カラムサイズに合わせて、Stringフィールドのサイズというか文字数を制限したかったのですが。

蛇足ですが、一般的なRDBでは文字列(VARCHAR)はUTF-8ベースなので、
カラムサイズもUTF-8でのバイト数になるのではなかったかと。

mam

unread,
Jul 13, 2023, 10:42:34 PM7/13/23
to Japan RAD Studio User Group
こんにちは。

例えばMySQLでは文字セット「utf8mb4」を使うと思いますが、
ご存知の通り、VARCHAR(バイトサイズ指定)でUTF-8の場合は文字によって1~4バイトのサイズであり、実際には何文字入るかわからないです。
MS SQL Serverは NVARCHAR(文字数指定)でUTF16LEで、文字によって2バイト又は4バイト(サロゲートペア)ですね。
(サロゲートペアを2文字とカウントするのか1文字とカウントするのかは知らないです。すいません。)
ご存知の通り、Windowsは内部的にUTF-16LEを使用しますので、DelphiのUnicode版もUTF-16LEを使用しています。
Unicodeと言っても様々なのでややこしいですよね。

//(uses に System.SysUtils が必要)
Length(TEncoding.UTF8.GetBytes('文字列'))
で、UTF16LE⇒UTF8変換したバイト配列の長さを調べるのは一つの方法かもしれません。
外していたらすいません。

-------以下私のホームページのご参考URL-------
MySQLの文字セット
https://mam-mam.net/javascript/mysql_collate.html
お勉強の為にUTF-8⇒本来のUnicode(21ビット)変換、本来のUnicode(21ビット)⇒UTF-16LE変換関数を公開しているURL
https://mam-mam.net/delphi/convert_utf8.html


2023年7月12日水曜日 10:37:11 UTC+9 Hikaru Fukushi:
Reply all
Reply to author
Forward
0 new messages