2017-05-08 11 views
0

私は3つのユニコード文字セットの和集合からランダムなUnicode文字列を生成する次の簡単なプログラムを持っています。D-language:コンソールにUnicode文字を印刷する方法は?

#!/usr/bin/env rdmd 
import std.uni; 
import std.random : randomSample; 
import std.stdio; 
import std.conv; 

/** 
* Random salt generator 
*/ 
dstring get_salt(uint s) 
{ 
    auto unicodechars = unicode("Cyrillic") | unicode("Armenian") | unicode("Telugu"); 
    dstring unichars = to!dstring(unicodechars); 

    return to!dstring(randomSample(unichars, s)); 
} 

void main() 
{ 
    writeln("Random salt:"); 
    writeln(get_salt(32)); 
} 

しかし、のwritelnの出力は次のとおりです。

$ ./teste.d 
Random salt: 
rw13 13437 78580112 104 3914645 

これらの数字は何ですか? Unicodeコードポイント?実際の文字はどのように印刷するのですか?

dstring unichars = to!dstring(unicodechars); 

それは文字列へCodepointSetオブジェクトunicode戻り、ないそれがカバーの文字を変換します。私は、UTF-8

+0

「ユニコード」は多くの点で間違っています。あなたはそれらのものをビットワインディングしていて、それがなぜコンパイルされるのかを知っています。おそらく、 '〜'連結などを代わりに使用したいでしょう。 –

+0

簡単な例がありますか?ところで、これらのbitwise orsはonlodeのDlangチュートリアルから来た... – fccoelho

+0

私はこのことがどのように動作するはずです。私はこれまでにlibのこの部分を使ったことはありませんでした。文書はうまく説明できません...あなたが読んでいるリンクは何ですか?しかし、あなたが現在ランダム化している文字列は、構造体メンバの印刷であり、文字のリストではありません。 –

答えて

4

に設定され、このラインは、あなたが持っている問題であるロケールでのUbuntu Linux上でいます。セットには文字の名前と境界がありますが、文字自体はありません。それはこれを取った:

InversionList!(GcPolicy)(CowArray!(GcPolicy)([1024, 1157, 1159, 1320, 1329, 1367, 1369, 1376, 1377, 1416, 1418, 1419, 1423, 1424, 3073, 3076, 3077, 3085, 3086, 3089, 3090, 3113, 3114, 3124, 3125, 3130, 3133, 3141, 3142, 3145, 3146, 3150, 3157, 3159, 3160, 3162, 3168, 3172, 3174, 3184, 3192, 3200, 7467, 7468, 7544, 7545, 11744, 11776, 42560, 42648, 42655, 42656, 64275, 64280, 5])) 

そして、その文字列からランダムな文字列を引き出しました!代わりに、あなたがしたい:そのオブジェクトのbyCodepointメソッドの呼び出し

dstring unichars = to!dstring(unicodechars.byCodepoint); 

は、範囲内の実際の文字を(うまく、コードポイント、ユニコードが乱雑である)が得られます、そして、あなたはその外の文字列を取得し、それをランダム化。

+0

優秀なアダム!それは今、完璧に動作します。どうもありがとう! – fccoelho

関連する問題