Versun

对待生命,不妨大胆一点,因为我们终将失去它


created: 2025-02-19, updated: 2025-02-19

Twitter的中文字符长度的计算

我的 CMS 在博客交叉发布到 X 上时,如果内容较多老是会因为字数限制的原因而发布失败。
研究了下发现 X 对非英文字符的计算和其它平台不一样,在Mastodon和Bluesky上,一个中文字符均算做一个字符数,但 X 却算做 2 个字符数。
所以,我添加了下面2个函数,一律将非ASCII的字符算做2个字符数,虽然代码不怎么好看,但能用
def count_chars(str)
  str.each_char.map { |c| c.ascii_only? ? 1 : 2 }.sum
end

def truncate_twitter_text(str, max_length)
  current_length = 0
  chars = []

  str.each_char do |c|
    char_length = c.ascii_only? ? 1 : 2
    break if current_length + char_length > max_length
    current_length += char_length
    chars << c
  end

  chars.join("")
end

Discussion on Mastodon, X, Bluesky.