Closed verygoodlee closed 11 months ago
暂时先这样吧,不影响观看,你说的方案可行,但是直接把改小,URL编码前后一样的标题又会变得很短(单其实可以支持比较长的标题),而且这长度是限制所有参数加起来的长度,40个中文在B站也是太多,传不过去的(因为B站的链接很长,还有音频)
暂时先这样吧,不影响观看,你说的方案可行,但是直接把改小,URL编码前后一样的标题又会变得很短(单其实可以支持比较长的标题),而且这长度是限制所有参数加起来的长度,40个中文在B站也是太多,传不过去的(因为B站的链接很长,还有音频)
有新方案了,在substring()
之后再处理一下,剔除掉乱码字符,\
利用decodeURIComponent()
解码时碰到异常字符会报错的特性
if (title.length > maxLength) {
title = title.substring(0, maxLength);
// 为防止尾部中文字符转义序列被截断造成乱码,尝试解码
for (; ; ) {
try {
decodeURIComponent(title);
break;
} catch (e) {
// UTF-8编码单字符最多占用4字节,转义序列最多4个%,
// 最多循环4次可剔除尾部异常部分
title = title.substring(0, title.lastIndexOf("%"));
}
}
title = title + "...";
}
碰到过挺多次了,有些标题的结尾部分乱码了 例如:2023年运动相机的王座,它还能守住吗?GoPro HERO12上手体验_哔哩哔哩_bilibili
可以排除播放器的原因,使用
wmic process where name="mpv.exe" get commandline
命令查看mpv调用的完整命令行,--force-media-title
确实乱码了应该是这部分对于长标题的截取出了问题,
encodeURIComponent()
会把中文字符编码为UTF8
编码的转义序列,后面再去substring()
可能会把中文字符截断造成乱码,\ 应该先substring()
再encodeURIComponent()
,此时maxLength
的值需要调小,感觉写死在40左右就挺合适的 https://github.com/LuckyPuppy514/Play-With-MPV/blob/7cc28426f65cc544efb1ccc620462a1e9dc91f7a/play-with-mpv.user.js#L1778-L1782