You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:02:57