-
java匹配unicode符号和表情_快速通过Unicode将国家代码转换为表情符号标志
2021-03-11 14:56:58快速通过Unicode将国家代码转换为表情符号标志我正在寻找一种快速的方法来使类似:let germany = "DE"进入let flag = "\u{1f1e9}\u{1f1ea}"即D到1f1e9和E到1f1ea的映射是什么我正在寻找.utf8作为字符串,但这返回一...快速通过Unicode将国家代码转换为表情符号标志
我正在寻找一种快速的方法来使类似:
let germany = "DE"
进入
let flag = "\u{1f1e9}\u{1f1ea}"
即D到1f1e9和E到1f1ea的映射是什么我正在寻找.utf8作为字符串,但这返回一个整数。
FWIW我的总体目标是能够采用任意国家/地区代码并获得相应的表情符号标志。
编辑:我也很好,只要持有一个做此映射的表(如果有的话)。 我在附近搜索,但没有找到。
5个解决方案
72 votes
这是将两个字母的国家/地区代码转换为其表情符号标志的通用公式:
func flag(country:String) -> String {
let base = 127397
var usv = String.UnicodeScalarView()
for i in country.utf16 {
usv.append(UnicodeScalar(base + Int(i)))
}
return String(usv)
}
let s = flag("DE")
编辑糟糕,无需传递嵌套的String.UnicodeScalarView结构。 事实证明,String正是出于此目的使用了append方法。 所以:
func flag(country:String) -> String {
let base : UInt32 = 127397
var s = ""
for v in country.unicodeScalars {
s.append(UnicodeScalar(base + v.value))
}
return s
}
再次编辑,在Swift 3中,他们取消了将UnicodeScalar附加到字符串的功能,并且使UnicodeScalar初始化程序失败(Xcode 8种子6),所以现在看起来像这样:
func flag(country:String) -> String {
let base : UInt32 = 127397
var s = ""
for v in country.unicodeScalars {
s.unicodeScalars.append(UnicodeScalar(base + v.value)!)
}
return String(s)
}
matt answered 2020-07-22T14:45:22Z
17 votes
如果有人在Objective C中寻找解决方案,这是方便的类别:
@interface NSLocale (RREmoji)
+ (NSString *)emojiFlagForISOCountryCode:(NSString *)countryCode;
@end
@implementation NSLocale (RREmoji)
+ (NSString *)emojiFlagForISOCountryCode:(NSString *)countryCode {
NSAssert(countryCode.length == 2, @"Expecting ISO country code");
int base = 127462 -65;
wchar_t bytes[2] = {
base +[countryCode characterAtIndex:0],
base +[countryCode characterAtIndex:1]
};
return [[NSString alloc] initWithBytes:bytes
length:countryCode.length *sizeof(wchar_t)
encoding:NSUTF32LittleEndianStringEncoding];
}
@end
测试:
for ( NSString *countryCode in [NSLocale ISOCountryCodes] ) {
NSLog(@"%@ - %@", [NSLocale emojiFlagForISOCountryCode:countryCode], countryCode);
}
输出:🇦🇩-公元🇦🇪-AE🇦🇫-自动对焦🇦🇬-AG🇦🇮-AI...
RolandasR answered 2020-07-22T14:45:52Z
6 votes
马特答案的两种优化。
无需在Swift 4中传递嵌套的String
为了避免传递小写字符串,我添加了uppercased()
这是代码。
func flag(from country:String) -> String {
let base : UInt32 = 127397
var s = ""
for v in country.uppercased().unicodeScalars {
s.unicodeScalars.append(UnicodeScalar(base + v.value)!)
}
return s
}
Lumialxk answered 2020-07-22T14:46:25Z
2 votes
深入了解哑光答案
Swift 2版本
public static func flag(countryCode: String) -> Character {
let base = UnicodeScalar("🇦").value - UnicodeScalar("A").value
let string = countryCode.uppercaseString.unicodeScalars.reduce("") {
var string = $0
string.append(UnicodeScalar(base + $1.value))
return string
}
return Character(string)
}
Swift 3版本,摘自[https://github.com/onmyway133/Smile/blob/master/Sources/Smile.swift#L52]
public func emoji(countryCode: String) -> Character {
let base = UnicodeScalar("🇦").value - UnicodeScalar("A").value
var string = ""
countryCode.uppercased().unicodeScalars.forEach {
if let scala = UnicodeScalar(base + $0.value) {
string.append(String(describing: scala))
}
}
return Character(string)
}
onmyway133 answered 2020-07-22T14:46:53Z
0 votes
对于更实用的方法,不使用可变变量,请使用以下命令:
private func flag(country: String) -> String {
let base: UInt32 = 127397
return country.unicodeScalars
.flatMap({ UnicodeScalar(base + $0.value) })
|> String.UnicodeScalarView.init
|> String.init
}
|>运算符是函数应用程序运算符,它像“管道”一样工作,以获取更自然的读取顺序:我们获取标量,将它们映射为新的标量,将其转换为视图,并将其转换为字符串。
它的定义如下:
infix operator |> : MultiplicationPrecedence
func |> (left: T, right: (T) -> U) -> U {
return right(left)
}
没有自定义运算符,我们仍然可以没有可变状态,就像这样:
private func flag(country: String) -> String {
let base: UInt32 = 127397
return String(String.UnicodeScalarView(
country.unicodeScalars.flatMap({ UnicodeScalar(base + $0.value) })
))
}
但是恕我直言,这读起来有些“向后”,因为自然的操作流程既不读入也不读入,而是读了一点。
Svein Halvor Halvorsen answered 2020-07-22T14:47:31Z
-
openapi-codegen:OpenAPI 3.0 CodeGen加上Node.js减去Java和表情符号-源码
2021-01-28 12:29:26本机支持OpenAPI 3.0.x,并通过内部转换支持Swagger / OpenAPI 1.2和2.0。 支持Node.js LTS版本。 用法 正在安装 npm i -g openapi-codegen 要么 克隆存储库,然后 npm i 要么 npx -p openapi-codegen cg ... ... -
表情符号转换为HTML思路解析
2018-01-11 12:07:40 -
java存储表情符号 Incorrect string value: '\xF0\x9F\x91\xBD' for column
2019-10-25 11:13:59最近碰到一个存储表情失败,需要做到三件事, 1.表和该项都需要支持 这时候,只是数据库表支持存储,但是... 把需要存储的表情,在保存的时候,通过Base64封装一层,而获取的时候,不用转换。 public static ...最近碰到一个存储表情失败,需要做到三件事,
1.表和该项都需要支持
这时候,只是数据库表支持存储,但是存储转换的时候,还是会有问题,以下两种方式可以处理:
2.代码进行转义处理 (推荐: 代码处理对于程序员来说最快,因为修改数据库编码,有时建表,会修改编码格式)
把需要存储的表情,在保存的时候,通过Base64封装一层,而获取的时候,不用转换。
public static void main(String args[]){ String str = "?夏天"; try { String s = new String(Base64.getEncoder().encode(str.getBytes()), "UTF-8"); System.out.println(s); String ss = new String(Base64.getDecoder().decode(s)); System.out.println(ss); }catch (UnsupportedEncodingException e){ System.out.println(e.getCause()); } }
3.修改数据库的默认编码
a.查看数据库的编码格式
1
2
3
SHOW VARIABLES
WHERE
Variable_name
LIKE
'character_set_%'
OR
Variable_name
LIKE
'collation%'
;
或
SHOW VARIABLES
Like
'%char%'
;
修改配置文件my.cnf 增加
character
-
set
-server=utf8mb4
如果不知道配置文件在哪里的话可以根据一下命令查找
1
2
3
mysqld
--verbose --help|grep -A 1 'Default options'
或者是执行:
mysql
--verbose --help|grep -A 1 'Default options'
通常服务器首先会读取/etc/my.cnf文件,如果发现该文件不存在,再依次尝试从后面的几个路径进行读取。
修改配置文件后保存,并重启mysql服务
1
2
3
service mysqld restart
或
service mysql restart
如果数据库、表已经创建可以直接修改数据库或表的编码格式
查看数据表的编码格式
1
show
create
table
<表名>;
修改数据库的编码格式
1
mysql>
alter
database
<数据库名>
character
set
utf8mb4;
修改数据表格编码格式
1
alter
table
<表名>
character
set
utf8mb4;
修改字段编码格式
1
alter
table
<表名> change <字段名> <字段名> <类型>
character
set
utf8mb4;
-
java unicode与汉字相互转换(处理特殊符号/表情)
2018-09-12 14:02:07汉字转unicode: StringEscapeUtils.escapeJava(user.getUserName()) unicode转汉字: StringEscapeUtils.unescapeJava(user.getUserName()汉字转unicode:
StringEscapeUtils.escapeJava(user.getUserName())
unicode转汉字:
StringEscapeUtils.unescapeJava(user.getUserName()
-
mysql error 表情 java 转换_java处理emoji(转)
2021-02-07 07:41:57最近对接ios、安卓客户端,需要处理emoji等表情符号,网上总结:1.过滤掉emoji表情符2.修改数据库的编码格式等,让其支持存储emoji以下分别对两种方案进行描述:第一种:过滤掉emoji表情符,统一用*代替利用emoji的... -
mysql表情符号变为_mysql Emoji表情字符集转换
2021-01-28 06:58:16Java代码java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)at ... -
emoji-db:苹果支持的JSON表情符号数据库。 由我的Alfred表情符号工作流程使用-源码
2021-02-05 03:16:39表情符号数据库 资源资源 所有不含表情符号的...将代码点转换为表情符号 的Unicode代码点 :smiling_face_with_sunglasses: 是1f60e 。 Java脚本 String . fromCodePoint ( parseInt ( '1f60e' , 16 ) ) ; 有趣的链接 -
bitsnpicas:Bits'N'Picas-位图和表情符号字体创建和转换工具-源码
2021-02-04 20:46:18Bits'N'Picas是一组用于创建和转换位图和表情符号字体的工具。 位图字体功能可以通过GUI或从命令行访问。 表情符号字体功能只能从命令行访问。 使用GUI创建和编辑位图字体 不带任何参数或使用edit命令启动Bits'N'... -
java后台处理APP表情-使用轻量工具emoji-java处理emoji表情字符
2020-09-15 13:45:11pom依赖 java工具类 测试 Java Url编码转换 在APP开发中,大多需要涉及表情符号丰富APP,但是因为我们的数据库一般是utf8编码,是3个字节,而表情...以下是通过emoji-Java解决数据库不能存储4字节表情符号的问题。 -
android评论输入表情符号
2019-05-16 18:08:55import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; public class StringToUtf8Utisl { ... * 将String字符串转换为UTF-8编码字符串 * @param str * ... -
Java 存储mysql数据库时如何进行Emoji表情转换和处理
2020-01-15 10:54:47当保存字符串到数据库里出现\xF0\x9F\x92\x94类似问题时,发现竟是因为输入了Emoji表情的原因,由于我的mysql数据库是utf8字符集,而且Emoji表情等特殊符号要占四个字节,所以导致数据库不能正常存入。 找了很多方法... -
Java 解决Emoji表情过滤问题
2018-02-26 14:29:57问题: Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。原因:UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而...2,写个工具类:过滤掉emoji表情符号public class EmojiFilter { ... -
java-emoji-converter:Emoji转换工具,可以使用各种类型的客户端生成的Emoji字符串转换转换成另一种格式-...
2021-02-04 22:15:33一种在每种类型之间转换表情符号字符串的工具,例如软银行表情符号,unicode表情符号,别名表情符号,html表情符号。 将软银行表情符号转换为unicode时,我们使用以下文件: : 快速入门快速入门 将此添加到您的... -
java微信昵称表情_java 微信昵称emoji表情保存失败 无法存入数据库(二)
2021-02-12 23:58:10前言:最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题。困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移。在此特别分析和整理,方便更多人。问题描述:... -
emoji 过滤 java_Java 解决Emoji表情过滤问题
2021-02-27 10:39:36Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。...将已经建好的表也转换成utf8mb42,写个工具类:过滤掉emoji表情符号public class EmojiFilter {private static boolean isEmojiCha... -
java web处理表情
2018-01-15 16:40:221、问题描述 在输入框输入表情,表情到后台会...将表情的代码,即\uD83D\uDE0A 转为类似html的符号存入数据库,去出来展示的时候在转换为\uD83D\uDE0A 展示。 过程 导包 dependency> groupId>com.vdurmontgroup -
java emoji过滤_Java 解决Emoji表情过滤问题
2021-02-12 17:22:22Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。...将已经建好的表也转换成utf8mb42,写个工具类:过滤掉emoji表情符号public class EmojiFilter {private static boolean isEmojiCha... -
java emoji显示乱码_Java 解决Emoji表情过滤问题
2021-03-22 11:02:47Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。...将已经建好的表也转换成utf8mb42,写个工具类:过滤掉emoji表情符号public class EmojiFilter {private static boolean isEmojiCh... -
java emoji过滤_Java 解决Emoji表情过滤问题(转载)
2021-02-27 19:33:41本文作者原文链接本人使用的是第三种引入jar的方法问题:emoji表情从三方数据中获取没有过滤,导致存入db的时候报错。原因:utf-8编码有可能是两个、三个、四个字节...2,写个工具类:过滤掉emoji表情符号public cla... -
java错误报告过滤_Java 解决Emoji表情过滤问题(转载)
2021-03-14 00:58:52本文作者我是周洲本人使用的是第三种引入jar的方法问题:Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。原因:UTF-8编码有可能是两个、三个、四个字节...2,写个工具类:过滤掉emoji表情符号public cl... -
java 微信昵称emoji表情保存失败 无法存入数据库(二)
2016-03-29 15:14:23最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题。困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移。在此特别分析和整理,方便更多人。 问题描述: ... -
emoji表情如何转换成UTF-8,UTF-16(JVM中)
2018-03-12 10:59:39注:文中可能有错误,欢迎指出来,谢谢举例说明emoji表情 1:比如你的wifi热点名称是一个章鱼符号 u+1F4192:转化成UTF-8为: F0 9F 90 993: 发现在Java的JVM中是用UTF-16存储表示的,也就是u+1F419转化为UTF-16... -
xxl-tool:使Java开发更加高效的一系列工具。(Java工具类库XXL-TOOL)-源码
2021-02-03 20:40:41XXL工具 XXL-TOOL,一系列保持Java高效的工具。 介绍 XXL-TOOL是使Java保持高效的一系列...表情符号模块 一个灵活可扩展的Emoji表情编解码库,可快速实现Emoji表情的编解码 杰森模块 json序列化,反序列化库 光纤模 -
java emoji mysql_mysql/Java服务端对emoji的支持
2021-03-08 07:29:59前言:最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题。困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移。在此特别分析和整理,方便更多人。问题描述:... -
java mysql emoj报错_mysql/Java服务端对emoji的支持
2021-01-27 00:41:23前言:最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题。困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移。在此特别分析和整理,方便更多人。问题描述:...