免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 17317 | 回复: 14
打印 上一主题 下一主题

请问“\ud83d\ude3d”这是什么字符? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-13 15:56 |只看该作者 |倒序浏览
本帖最后由 freeand 于 2012-10-13 16:40 编辑

编码码是:\ud83d\ude3d 在网页上看到并复制粘贴到论坛编辑器时看到的是:   发帖后变成:😽

经perl处理后:
  1. my $text = '\ud83d\ude3d';
  2. $text =~ s/\\u([0-9a-fA-F]{4})/pack("U",hex($1))/eg;
  3. $text = encode( "utf8", $text );
  4. printf  "$text\n";
复制代码
输出:

乱码?

有什么办法转成正常的utf8字符?

论坛徽章:
0
2 [报告]
发表于 2012-10-13 18:34 |只看该作者
  1. perldoc perlre
复制代码
Escape sequences

论坛徽章:
0
3 [报告]
发表于 2012-10-13 19:42 |只看该作者
sjdy521 发表于 2012-10-13 18:34


跟这个没关系吧?

http://www.charbase.com/1f63d-unicode-kissing-cat-face-with-closed-eyes
IE浏览器下两个“口口”,Firefox看到的和我上面发的图片一样,就像“1F63D”这几个字符。

论坛徽章:
0
4 [报告]
发表于 2012-10-13 19:45 |只看该作者
这是perl板块啊

论坛徽章:
0
5 [报告]
发表于 2012-10-13 19:53 |只看该作者
sjdy521 发表于 2012-10-13 19:45
这是perl板块啊


是啊,问题就是用perl来做unicode转utf8的问题啊。
一般中文的unicode代码pack后可以正常转成utf8格式。但 \ud83d\ude3d 转成后无论是显示还存保存在utf8格式的文件里,都是那几个“乱码”。
  1. my $text = '\u4f60';
  2. $text =~ s/\\u([0-9a-fA-F]{4})/pack("U",hex($1))/eg;
  3. $text = encode( "utf8", $text );
  4. printf  "$text\n";
复制代码
结果:你

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2012-10-13 22:01 |只看该作者
本帖最后由 jason680 于 2012-10-14 10:46 编辑

回复 1# freeand


    \ud83d \ude3d  ==> utf-16

http://www.russellcottrell.com/g ... ePairCalculator.htm
    Enter a hexadecimal Unicode surrogate pair (D800-DBFF and DC00-DFFF):
    d83d + de3d = 1F63D (utf-32)  😽

Note: 😽 it will be a graphic like as an animal "cat",
but 😽 (utf-32) can't show on this page

论坛徽章:
0
7 [报告]
发表于 2012-10-13 23:55 |只看该作者
本帖最后由 freeand 于 2012-10-14 00:00 编辑

回复 6# jason680

是这样了,和我之前发的那个链接相关。
我用Firefox 1.5,IE 8都没法显示那个表情,似乎要修改一下系统的注册表。

现在比较关心的不是显示,而是它能不能转成UTF8的形式保下来。按以上的办法转成UTF8(错码?乱码?)保存后,再也恢复不成 \ud83d\ude3d 了。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2012-10-14 10:31 |只看该作者
回复 7# freeand

$ cat unicode.pl

use strict;
use warnings;

use Encode;

my $text = '\ud83d\ude3d';
$text =~ s/\\u(d[89ab]..)\\u(d[c-f]..)/
  pack("U",0x10000 + (hex($1)-0xD800)*0x400 + hex($2)-0xDC00)/egx;
$text =~ s/\\u([0-9a-fA-F]{4})/pack("U",hex($1))/eg;

# please refer http://perldoc.perl.org/perlunicode.html
# or use 'perldoc perlunicode' and search 0x10000
# $uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00);


$text = encode( "utf8", $text );
print "$text\n";

   

论坛徽章:
0
9 [报告]
发表于 2012-10-14 12:35 |只看该作者
你为啥一定要纠结在\ud83d\ude3d上呢 这不是perl语言的unicode表示方式吧,
  1. use Encode qw/encode/;print encode "utf8","\N{U+1F63D}"
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-10-14 12:38 |只看该作者
jason680 发表于 2012-10-14 10:31
回复 7# freeand

$ cat unicode.pl


十分感谢!
unicode的转换处理简单又复杂。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP