我在网页的HTML中有以下字符—
。它在网页上呈现“ - ”(EM DASH)(如果有问题,则通过谷歌Chrome浏览器)。无论我如何使用文件编码(“utf-8”,“cp1251”,“cp866”),它在网页上总是“ - ”。但是当我运行以下python代码时:
from HTMLParser import HTMLParser
h_parser = HTMLParser()
print h_parser.unescape('—')
它在unicode表中输出一些控制符号,即“保护区末尾”。
我应该使用什么python代码从—
字符串/ unicode字符串中获取“ - ”。我使用python2.7
答案 0 :(得分:1)
字符引用中的数值(在您的情况下为151)是指Unicode代码点151(0x97),它位于Latin-1 Supplement中,代表控制字符。
很可能正在使用无效值151,因为它对应于Windows代码页1252中的短划线字符。它被浏览器呈现为短划线可能是尝试处理此常见错误。
em dash的正确字符引用为public JsonResult Datatable()
{
var parser = new DataTablesParser<Card>(Request, SomeIQueryableData);
return Json(parser.Parse());
}
。
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "Brands" ? "nav-item selected" : "")" id="main-nav-item-128" data-id="128">
<a href="@Url.Action("Brands","Product", new { @id=15})" class="nav-link dropdown-toggle" aria-expanded="false" data-target="#dropdown-menu-128">Pwani Life Care </a></li>
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "Brands" ? "nav-item selected" : "")" id="main-nav-item-128" data-id="128">
<a href="@Url.Action("Brands","Product", new { @id=16})" class="nav-link dropdown-toggle" aria-expanded="false" data-target="#dropdown-menu-128"> Pwani Life Care </a> </li>
虽然Python 2对此很困难,但在Python 3中,html.unescape()
函数显式处理HTML 5 spec中指定的无效字符引用。如果可能,您可以使用Python 3解决您的问题:
—
如果您不能使用Python 3,您可以复制Python 3 >>> import unicodedata
>>> unicodedata.name(unichr(151))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: no such name
>>> unicodedata.lookup('em dash')
u'\u2014'
>>> unicodedata.lookup('em dash').encode('cp1252')
'\x97'
模块中的代码(请参阅__init__.py
文件)并将HTML代码传递给它,然后再转交给{{1 }}