怎样修复emoji high five资源异常

ios UIlabel计算含有emoji符号的字符串高度出现错误_百度知道
ios UIlabel计算含有emoji符号的字符串高度出现错误
ios中计算含有emoji符号和 字符串的混合字体的长度,(CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);但是比如说label长度为200,高为23,最后计算自动长度结果为160*46,页面实际字符一行就能显示,现在由于计算出来为2行,会出现空白行,如何计算会得到正确的label高度
计算size不要用这个方法 计算string的size 然后给label赋值就行
UILabel * lb = [[UILabel alloc]init];
CGSize newSize = [lb.text sizeWithFont:lb.font constrainedToSize:CGSizeMake(320, 1000) lineBreakMode:NSLineBreakByWordWrapping];320是lb的最大长度 算出来给lb重新设置size就行
我那个方法是IOS7以后的计算高度的方法 你那个已经失效了
我这个方法IOS8都可以用 别说IOS7的 朋友
来自团队:
其他类似问题
为您推荐:
emoji的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Emoji表情字符现在在APP已经广泛支持了。但是Mysql的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常:Incorrect string value: '\xF0\x90\x8D\x83...' for column原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节。解决的方案有两种:1.使用utf8mb4的mysql编码来容纳这些字符。2.过滤掉这些特殊的表情字符。关于第一种解决方法,请参考:/a/6820 和&http://info.michael-simons.eu//java-mysql-and-multi-byte-utf-8-support/有大量细节需要注意,例如:mysql版本,mysql的配置,mysql connector的版本等等。。因为我们使用的云数据库,所以我选择了过滤这些特殊字符。其实过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。下面是我的代码。更多可以参考:/questions//why-a-surrogate-java-regexp-finds-hypen-minusimport mons.lang3.StringU
public class EmojiFilterUtils {
* 将emoji表情替换成*
* @param source
* @return 过滤后的字符串
public static String filterEmoji(String source) {
if(StringUtils.isNotBlank(source)){
return source.replaceAll(&[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]&, &*&);
public static void main(String[] arg ){
String text = &This is a smiley \uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 &;
System.out.println(text);
System.out.println(text.length());
System.out.println(text.replaceAll(&[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]&, &*&));
System.out.println(filterEmoji(text));
}catch (Exception ex){
ex.printStackTrace();关于MYSQL保留emoji表情及openfire处理办法 - MySQL
&&&&>>&& MySQL
关于MYSQL保存emoji表情及openfire处理办法
在开发移动应用的时候,用户在输入了emoji表情后,系统异常,我是做服务器端的,发现错误如下:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
网上有解决办法。就是把数据库对应字段编码改为utf8mb4,这个编码可以看做是utf8升级版,完全向下兼容utf8,所以基本不用担心有什么乱码问题。
但是在openfire也做相同处理以支持发emoji表情的时候,发现只改字段编码还是不行。各种和之前的表进行对比,发现没什么不同;思前想后,觉得问题不是出在数据库上,应该是连接驱动有问题!果然,openfire用的驱动包是mysql.jar,没看是什么版本;我把之前好使的mysql驱动包拿来,果然可以了!
让mysql支持保存emoji表情,需进行如下两步。
1、数据库对应字段编码改为utf8mb4;
2、mysql连接驱动至少在5.1.16以上,我用的是mysql-connector-java-5.1.16-bin.jaremoji字符无法写入Mysql数据库问题 - 希望能混日子 - ITeye技术网站
博客分类:
最近发现Kettle的ETL中一直在报错,查看日志发现有些字无法入库,类似以前遇到的数据源与目的数据库字段字符集不同导致的一样;但这个是从游戏接口日志文件读取的,字符集统一都是utf8,不应该是上述情况导致。错误日志如下
24-12 18:39:44,257 - Column types: string,smallint,string,string,string,string,int,string,string,string,string,string,string,string,string,int
ERROR 24-12 18:39:45,281 - Table output - Because of an error, this step can't continue:
ERROR 24-12 18:39:45,281 - Table output - org.pentaho.di.core.exception.KettleException:
Error batch inserting rows into table [t_oper_mone_first_buy_fact].
Errors encountered (first 10):
Incorrect string value: '\xF0\x9F\x91\x8D' for column 'f_char_name' at row 1
Error updating batch
Incorrect string value: '\xF0\x9F\x91\x8D' for column 'f_char_name' at row 1
at org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:393)
at org.pentaho.di.trans.steps.tableoutput.TableOutput.processRow(TableOutput.java:117)
at org.pentaho.di.trans.step.RunThread.run(RunThread.java:40)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.pentaho.di.core.exception.KettleDatabaseBatchException:
Error updating batch
Incorrect string value: '\xF0\x9F\x91\x8D' for column 'f_char_name' at row 1
at org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:309)
... 3 more
Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x91\x8D' for column 'f_char_name' at row 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatchSerially(ServerPreparedStatement.java:796)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1449)
at org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:304)
... 3 more
经过在网上查询,\xF0\x9F开头的确实是UTF8字符集范围;UTF8长度是2-4个字节,我们在Mysql常用的是2-3个字节长,但这个抛出来的错误显示是4个字节,所以就错在这了(用java写代码也会报同样错误,原因是jdbc在做数据插入前会严格检查字段的类型、长度,一但不符就会抛出异常;php在这方面稍微自作聪明点,会把多出来的字节截掉,但对数据本身就是丢掉了信息,不适合做数据ETL方面的工作)。
又经过网上查询,有说这种字符属于emoji表情符,关于emoji是什么,点这里有科普 /view/2631589.htm找到问题就好办了,将f_char_name字段的字符集改为utf8mb4,在Kettle的数据库连接高级设置中,设置当前会话字符集为utf8mb4,问题解决。
经过这次问题,以后有些字段有必要考虑设置成utf8mb4字符集来支持更广阔的字符内容,缺点显而易见,就是多占地儿了。
是否采用,视具体情况而定吧。
浏览: 149123 次
来自: 北京
这篇文章不错,推荐给博主,http://www.yangguo ...
“打debug版本的multidex包还没想到好法子,只能在d ...
duan10jun 写道恩。按照你的方法在eclipse中是可 ...
duan10jun 写道恩。按照你的方法在eclipse中是可 ...
恩。按照你的方法在eclipse中是可以成功的,但是在andr ...

我要回帖

更多关于 emoji表情 的文章

 

随机推荐