技术问询:获取innerHTML时出现的多余u' 和 '及 来自何处?
u'和'的原因分析 嘿,这个问题我之前在项目里也碰到过,大概率和后端的字符串处理(尤其是Python环境下)脱不了干系,咱们一步步拆解:
Python环境下的字符串标识泄露
u'是Python 2中用来标记Unicode字符串的字面量前缀(Python 3里默认字符串都是Unicode,不会有这个前缀)。如果你的后端是用Python 2写的,或者有从Python 2迁移过来的代码,很可能是后端在输出内容时,错误地把字符串的原始表示形式(比如误用了repr()函数,或者模板引擎没有正确解析Unicode字符串)直接输出到了HTML里,导致这些标识被当成普通文本出现在innerHTML中。接口返回数据的格式错误
如果前端是通过接口获取数据后插入DOM,那可能是后端没有正确序列化数据:比如本该返回纯文本或JSON格式的内容,结果返回了Python字符串的repr结果(比如u"你要的内容"),前端拿到后直接插入innerHTML,自然就会把u'和包裹的'显示出来。模板渲染的疏漏
要是用了后端模板(比如Jinja2、Django模板),可能是模板里的变量没有被正确解析:比如模板代码里直接输出了未处理的Python字符串对象,而不是把它转成纯文本内容,导致模板引擎把Python的字符串标识也一并输出了。
举个错误示例,假设后端Python代码写了:
# 错误:用repr返回字符串的原始表示 return repr(u"测试内容")
前端拿到的就是u'测试内容',插入innerHTML后就会显示这些多余的标识。
排查方向可以先看后端返回的原始数据是否已经带有u',再检查后端代码里有没有误用字符串处理函数,或者模板变量是否做了正确解析。
内容的提问来源于stack exchange,提问作者user9485152

