Twitter的中文字符长度的计算
我的 CMS 在博客交叉发布到 X 上时,如果内容较多老是会因为字数限制的原因而发布失败。
研究了下发现 X 对非英文字符的计算和其它平台不一样,在Mastodon和Bluesky上,一个中文字符均算做一个字符数,但 X 却算做 2 个字符数。
研究了下发现 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