2017-06-04 3 views
3

私はこのようなラザロWindowsプログラムでボタンのキャプションとしてTricolon Unicode文字#$ 205Dを割り当てるしようとしている:Lazarusでは、「ユニコードは潜在的なデータ損失を伴うキャスト」という警告をどのようにして防止しますか?

MyButton.Caption := #$205D; 

それは動作しますが、ボタンはTricolonの罰金を表示しますが、コンパイラの発します警告:「警告:データ損失の可能性があるUnicode定数キャスト」。

警告を削除するには、LCLコントロールのキャプションにTricolon文字を正しく割り当てるにはどうすればよいですか?

+0

文字エンコードに関連してアクティブなコンパイラオプションは何ですか? –

+1

'MyButton.Caption:=#$ E2#$ 81#$ 9D;' LCLはUTF8エンコーディングを使用しますが、 '#$ 205D'はUTF16文字定数です。 – Abelisto

+0

@Abelistoあなたが正しく、それは(?)の解決策です。私はそれを受け入れることができるようにこれを回答するように気をつけますか? – dummzeuch

答えて

3

LCLはUTF8エンコードを使用しますが、#$ 205DはUTF16文字定数です。だからではなく、UTF8符号化定数を使用:

const 
    CTricolon = #$E2#$81#$9D; 
    //CTricolon = '⁝'; // Also works fine if using character(s) as is in the source 

... 

    MyButton.Caption := CTricolon; 
1

問題は、2バイトを検出することである - >(デフォルト)1バイト変換はコンパイルされ、デフォルトは1バイトタイプの正確なコードページが実行され。

(ロケールによって、Windowsのエンコーディングを変えるか、ラザロで起動時にUTF8に設定のいずれか)

コンパイラは、これが危険であることを警告しています。これを修正するには、ソースコードをutf8に設定し、utf8文字列を割り当てます。

関連する問題