如何用Ruby编写方法实现Unicode码点与十六进制格式转换?
没问题,我帮你实现这三个Ruby方法,刚好覆盖你需要的Unicode码点和标准参考格式之间的转换需求。下面是完整的代码和每个方法的功能说明:
方法实现代码
# 将十进制码点(字符串/数字)转换为Unicode参考格式(如"U+0061") def convert_unicode(input) codepoint = input.to_i # 用大写十六进制格式化,补前导零到至少4位(兼容高位码点,比如emoji会自动扩展位数) "U+#{sprintf('%04X', codepoint)}" end # 将字符或十进制码点转换为纯十六进制字符串(如"0061") def convert_unicode_to_hex(input) codepoint = if input.is_a?(String) && input.length == 1 input.codepoints.first else input.to_i end sprintf('%04X', codepoint) end # 将Unicode参考格式(如"U+0061")或字符转换为十进制码点(如97) def convert_unicode_to_codepoints(input) if input.start_with?('U+') # 截取U+后面的部分,转成十进制 input[2..-1].to_i(16) elsif input.is_a?(String) && input.length == 1 # 直接取字符的码点 input.codepoints.first else # 如果是数字字符串/数字,直接转成整数 input.to_i end end
测试示例
# 测试convert_unicode puts convert_unicode("97") # 输出: U+0061 puts convert_unicode(128512) # 输出: U+1F600(笑脸emoji的码点) # 测试convert_unicode_to_hex puts convert_unicode_to_hex("a") # 输出: 0061 puts convert_unicode_to_hex(97) # 输出: 0061 puts convert_unicode_to_hex(128512) # 输出: 1F600 # 测试convert_unicode_to_codepoints puts convert_unicode_to_codepoints("U+0061") # 输出: 97 puts convert_unicode_to_codepoints("a") # 输出: 97 puts convert_unicode_to_codepoints("U+1F600") # 输出: 128512
逻辑说明
- convert_unicode:先把输入转成十进制整数,再用
sprintf格式化带前导零的十六进制字符串,拼接上"U+"就是Unicode参考资料里常用的格式。 - convert_unicode_to_hex:判断输入是单个字符还是数字,字符的话用
codepoints取码点,再转成十六进制字符串;数字则直接格式化。 - convert_unicode_to_codepoints:处理两种常见输入——"U+XXXX"格式的字符串(截取后转十六进制到十进制),或者单个字符(直接取码点),同时兼容数字输入。
内容的提问来源于stack exchange,提问作者codeadventurer
相关产品推荐
相关产品推荐

