我的 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