2011-08-17 9 views
14

キャンバスfillTextを使用して特殊文字をフォントで表示したいとします。コードは基本的には次のとおりです。ユニコード文字でキャンバスのfillTextを理解できない問題

canvas = document.getElementById("mycanvas"); 
context = canvas.getContext("2d"); 

hexstring = "\u00A9"; 
//hexstring = "\\u" +"00A9"; 

context.fillText(hexstring,100,100); 

私が最初hexstringを使用している場合は、それが動作し、私は著作権記号を取得します。 2番目のものを使用すると、\u00A9と表示されます。数字を繰り返し処理する必要があるので、フォントのすべての特殊文字を表示するには、2番目の文字を使用する必要があります。私はutf-8を使用しています。私は間違って何をしていますか? NUM通じ

答えて

27

使用String.fromCharCodeに動作します。あなたは16進数でエンコードされた文字列を持っている場合は

var c= 169; // 0xA9 
context.fillText(String.fromCharCode(c), 100, 100); 

あなたが最初進数としてそれを解析することができます

var h= '00A9'; 
String.fromCharCode(parseInt(h, 16)); 

は文字の範囲を含む文字列を作成するには、数字の配列を作成することができますapplyを使用して、それらを引数としてfromCharCodeに渡します。これは、文字ごとに別々にstring= string+String.fromCharCode(c)を実行するよりも高速です。ダウン投票は、この作業の理由

function makeRange(n0, n1) { 
    var a= []; 
    for (; n0<n1; n++) 
     a.push(n0); 
} 

var someChars= makeRange(0xA9, 0xFF); 
var stringOfChars= String.fromCharCode.apply(String, someChars); 
+1

そして、もちろん、StackOverflowは私の救助にもう一度来る。ありがとうbobince! –

0

実施例

http://jsfiddle.net/sbYPj/

評価時間:)

反復処理し、これを文字に番号をオンにするだけで罰金

var num = value; 
var uni = '"\\u' + num+'"'; 
var result; 
if (/^[A-F\d]{4}$/.test(num)) 
{ 
    result = eval(uni); 
} 
+0

.... – samccone

+1

元に戻しました正規表現のチェックが即座にこの脆弱性を排除し、それでも 'eval'は、遅い醜い、危険であり、以来、downvote [通常](のhttp:// stackoverflowの.com/questions/86513/why-is-use-javascript-eval-function-a-bad-idea)を避けてください。 – bobince

+1

[これは私が最初に答えを読んだときに思ったことです。](http://www.youtube.com/watch?v=TO5wryDdEI0)私はその日のアップボトムをすべて使用しました。私は4時間後に戻ってくることを覚えようとします。 – sdleihssirhc

関連する問題