function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
wayawaya 

文字列のバイト数を取得したい!

 

皆様お世話になっております。 

 

 

 表記の通り、文字列のバイト数を求める処理を作成しております。 

 しかし、ApexではJavaのようにgetBytes()関数が使えないようで、 

 どのような方法で取得しようか困っております。  

 解決方法をご存知の方、どうかお助けください。

宜しくおねがい致します。

Best Answer chosen by Admin (Salesforce Developers) 
wayawaya

ご返信ありがとうございます。
意図通りに改行できる方法が早く実装される事を祈りつつ、
解決とさせて頂きます。

All Answers

TierraTierra
これはどのような目的で必要なのでしょうか?
wayawaya

ご返信ありがとうございます。 

用途としては、visualforceでpdf出力をしようとしています。
改行をさせたい箇所でpdfの改行コード(\r) を入れたとしても、  

次の行の長さによっては改行されずに半角スペース(?)が挿入されるだけの場合があります。

この状態を避ける為に1行の長さを一定にする為に必ず改行される長さになるまで 

行の後ろを全角スペースで埋めるという方法を取りました。

 しかし、2バイト文字と1バイト文字で文字の大きさが違う為に1バイト文字が多い場合には
スペース埋めをしても「まだこの行には次の行の文字が入るよ」と判定されてしまい、
改行されないケースが発生しました。

 

よってバイトで判断が出来れば一定の文字スペースを埋めてくれると判断しました。

※現状ですが正確なバイト数を求める必要が無いため、
  a~zとよく使う記号類は1、その他は2と換算してだいたいの大きさを求める事で
  問題の発生は(ほぼ)防げています。

 
より良いソリューションがございましたらご提示ください。
宜しくお願い致します。

TierraTierra
そうですね。。。PDFでの改行は厄介、なんとかしてほしい問題ですね。バイトを取得するというメソッドはないので、詳細は分かりませんがご記載されたような処理が適当かもしれないですね。
wayawaya

ご返信ありがとうございます。
意図通りに改行できる方法が早く実装される事を祈りつつ、
解決とさせて頂きます。

This was selected as the best answer
tajimtajim
Force.com Platformではすべての文字をUnicodeで扱うため、

全角文字は2バイトから6バイトまで存在することになり、

少々やっかいだと思ったのですが

主旨はバイト数ではなく、半角・全角の区別だったということですね。



unicodeでは、!から~ がACCII文字の範囲、。から゚が半角カナ文字の範囲となります。

なので、正規表現で表すと[!-~。-゚]が半角、[^!-~^。-゚]が全角です。



ご参考になれば。