2013-02-28 82 views
2

我有一个UITextField来输入一个unicode值,当我点击一个UIButton需要转换它并显示在UILabel
下面的代码为我工作正常(我的Unicode代码中):转换unicode

NSString *str = [NSString stringWithUTF8String:"\u0D05"]; 
    m_CtrlLabel.text=str; 

我的问题是我无法从UITextField转换的4位二进制。那是我在UITextField里输入0D05,我需要转换它并在标签中显示,我尝试了很多组合,但没有运气。
预先感谢

+0

为什么你downvote?请评论原因或提供答案,如果这不是一个有用的问题 – Melbourne 2013-02-28 10:20:18

+1

Btw,Unicode值可以有六个十六进制数字。 – 2013-02-28 11:01:32

+0

我觉得你很困惑。如果这是一个有用的问题,那么应该提供答案! – 2013-02-28 11:07:49

回答

0

问题是输入应字符指针

NSString *str = [NSString stringWithUTF8String:[self.textField.text UTF8String]]; 
    m_CtrlLabel.text=str; 
4

0D05仅仅是一个十六进制数。您可以使用NSScanner将十六进制字符串解析为一个整数,然后创建一个包含Unicode字符的NSString

NSString *hexString = yourInputField.text; 

NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
uint32_t unicodeInt; 
if ([scanner scanHexInt:&unicodeInt]) { 
    unicodeInt = OSSwapHostToLittleInt32(unicodeInt); // To make it byte-order safe 
    NSString *unicodeString = [[NSString alloc] initWithBytes:&unicodeInt length:4 encoding:NSUTF32LittleEndianStringEncoding]; 
    yourOutputLabel.text = unicodeString; 
} else { 
    // Conversion failed, invalid input. 
} 

这个工程即使有统一码> U + FFFF,如1F34C(感谢R.费尔南德斯Martinho他的反馈)。

+2

例如,如果用户输入1F34C,那么这将不起作用,以获得[可爱的香蕉](http://www.fileformat.info/info/unicode/char/1f34c/browsertest.htm)。 – 2013-02-28 10:59:31

+1

@ R.MartinhoFernandes:你太对了! ...我已经更新了我的答案。 – 2013-02-28 12:14:56

+0

优秀的,有这个不完整的解决方案,这遍及整个stackoverflow和互联网......这是第一个适用于像可爱的香蕉那些更大的Unicode值的工作! – 2014-07-02 16:31:12

0

尝试更改您的UILable的字体。
其实一些字体不能显示所有的unicode输出!
这发生在我身上Java Swing曾经!
我试图在JLabel上显示unicode字符串,但unicode字符串未显示在JLablel上。
然后我将字体更改为Arial unicode值得到显示!
所以我建议你尝试改变字体从Arial或其他字体。

希望这会有所帮助!