docs: 完善标题长度计算的注释与 emoji 计数说明
新增 MAX_TITLE_LENGTH 常量,补充 UTF-16 码元计数规则: ZWJ 序列(💇♀️)= 5 贡献值,旗帜(🇨🇳)= 4,SMP emoji = 2。 对应 Go CalcTitleLength 算法,澄清各类 emoji 的计算逻辑。
Showing
1 changed file
with
16 additions
and
3 deletions
| 1 | """UTF-16 标题长度计算,对应 Go pkg/xhsutil/title.go。""" | 1 | """UTF-16 标题长度计算,对应 Go pkg/xhsutil/title.go。""" |
| 2 | 2 | ||
| 3 | +from __future__ import annotations | ||
| 4 | + | ||
| 5 | +MAX_TITLE_LENGTH = 20 | ||
| 6 | + | ||
| 3 | 7 | ||
| 4 | def calc_title_length(s: str) -> int: | 8 | def calc_title_length(s: str) -> int: |
| 5 | """计算小红书标题长度。 | 9 | """计算小红书标题长度。 |
| 6 | 10 | ||
| 7 | - 规则:非 ASCII 字符(中文、全角符号等)算 2 字节, | ||
| 8 | - ASCII 字符算 1 字节,最终结果向上取整除以 2。 | 11 | + 规则(同 Go CalcTitleLength): |
| 12 | + - 非 ASCII 字符(中文、全角符号、emoji 代码单元等)算 2 | ||
| 13 | + - ASCII 字符算 1 | ||
| 14 | + - 最终结果向上取整除以 2,上限 MAX_TITLE_LENGTH = 20 | ||
| 15 | + | ||
| 16 | + Emoji 按 UTF-16 码元计数: | ||
| 17 | + - 基础 emoji(如 ✨ U+2728, BMP)= 1 码元 → 权重 2 → 贡献 1 | ||
| 18 | + - SMP emoji(如 💇 U+1F487,surrogate pair)= 2 码元 → 权重 4 → 贡献 2 | ||
| 19 | + - ZWJ 序列(如 💇♀️)= 5 码元 → 权重 10 → 贡献 5 | ||
| 20 | + - 旗帜(如 🇨🇳,2 个 regional indicator)= 4 码元 → 权重 8 → 贡献 4 | ||
| 9 | 21 | ||
| 10 | Examples: | 22 | Examples: |
| 11 | >>> calc_title_length("你好世界") | 23 | >>> calc_title_length("你好世界") |
| @@ -14,9 +26,10 @@ def calc_title_length(s: str) -> int: | @@ -14,9 +26,10 @@ def calc_title_length(s: str) -> int: | ||
| 14 | 3 | 26 | 3 |
| 15 | >>> calc_title_length("OOTD穿搭分享") | 27 | >>> calc_title_length("OOTD穿搭分享") |
| 16 | 6 | 28 | 6 |
| 29 | + >>> calc_title_length("💇\u200d♀️") | ||
| 30 | + 5 | ||
| 17 | """ | 31 | """ |
| 18 | byte_len = 0 | 32 | byte_len = 0 |
| 19 | - # 用 UTF-16 编码来处理(包括 surrogate pairs) | ||
| 20 | encoded = s.encode("utf-16-le") | 33 | encoded = s.encode("utf-16-le") |
| 21 | for i in range(0, len(encoded), 2): | 34 | for i in range(0, len(encoded), 2): |
| 22 | code_unit = int.from_bytes(encoded[i : i + 2], "little") | 35 | code_unit = int.from_bytes(encoded[i : i + 2], "little") |
-
Please register or login to post a comment