2011-08-17 11 views
14

मैं कैनवास fillText का उपयोग कर फ़ॉन्ट में विशेष वर्ण प्रदर्शित करना चाहता हूं। अगर मैं पहले hexstring का उपयोगयूनिकोड वर्णों के साथ कैनवास fillText को समझने में समस्या

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

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

context.fillText(hexstring,100,100); 

, यह काम करता है और मैं कॉपीराइट प्रतीक मिलती है: कोड मूल रूप से है। अगर मैं दूसरे का उपयोग करता हूं, तो यह सिर्फ \u00A9 प्रदर्शित करता है। चूंकि मुझे संख्याओं के माध्यम से पुन: प्रयास करने की आवश्यकता है, इसलिए मुझे फ़ॉन्ट के सभी विशेष पात्रों को प्रदर्शित करने के लिए दूसरे का उपयोग करने की आवश्यकता है। मैं utf-8 का उपयोग कर रहा हूँ। मैं क्या गलत कर रहा हूं?

उत्तर

27

उपयोग String.fromCharCode एक चरित्र में एक नंबर चालू करने के लिए ।

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

आप एक हेक्स एन्कोड स्ट्रिंग है, तो आपको लगता है कि पार्स कर सकते हैं पहले एक हेक्स संख्या के रूप में:

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

एक स्ट्रिंग वर्णों की एक श्रृंखला से युक्त बनाने के लिए, आप संख्या की एक सरणी बना सकते हैं और फिर fromCharCode पर तर्क के रूप में उन्हें पास करने के लिए apply का उपयोग करें। प्रत्येक चरित्र के लिए अलग-अलग 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

के लिए अपवोट और निश्चित रूप से, स्टैक ओवरव्लो अभी तक मेरे बचाव में आता है। धन्यवाद बॉबन्स! –

0

काम कर उदाहरण

http://jsfiddle.net/sbYPj/

Eval समय :)

संख्या के माध्यम से दोहराएं और इस काम करेंगे ठीक

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

क्यों नीचे वोट इस काम करता है .... – samccone

+1

पूर्ववत downvote के बाद से regex जांच तत्काल जोखिम निकालता है, लेकिन अभी भी 'eval', धीमी गति से बदसूरत, खतरनाक है और [आम तौर पर] (http: // stackoverflow .com/प्रश्न/86513/क्यों-प्रयोग-जावास्क्रिप्ट-eval-function-a-bad-idea) सर्वोत्तम से बचा है। – bobince

+1

[जब मैंने जवाब पढ़ा तो मैंने पहली बार सोचा था।] (Http://www.youtube.com/watch?v=TO5wryDdEI0) मैंने दिन के लिए अपने सभी अपवॉट्स का उपयोग किया है; मैं चार घंटे में वापस आने के लिए याद रखने की कोशिश करूंगा। – sdleihssirhc

संबंधित मुद्दे