我正在使用Jsoup从一个网页收集数据,该网页包含链接到我的数据库的php脚本。我得到的数据包括如下导航坐标:51°42.41N 004°54.61W
数据在网页上正确显示,但当我使用jsoup解析它并将结果字符串插入我的应用程序时,它们在字符串中的某些点包含替换字符U+FFFD。。。这样地:
5142.41 n 004 54.61 w
我可以使用以下命令删除这些特殊功能:
.replaceAll("\uFFFD", "")
然而,这会导致:
51 42.41N 004 54.61W
这不是很理想,因为这些是导航坐标。
Jsoup对此负责吗?还是Android无法显示这些字符?
有没有可能在这些字符被制作成之前“捕捉”它们,以便我可以将它们与Android显示的类似内容进行匹配?
例如,导航坐标中显示的字符是“序数”符号,我可以将其替换为“度”符号°。
附加:我用于收集数据的代码:
Element ntmNumber = tableRows.select("td:eq(0)").last();
String ntmAmt = ntmNumber.text();
System.out.println("NtmLoadingTask is Running");
if (tableRows != null) {
int ntmInt = Integer.parseInt(ntmAmt);
for (int i = 0; i < ntmInt; i++) {
Elements titles = tableRows.select("td:eq(1)");
String ntmTitle = titles.get(i).text() + "\n";
arr_dataNtmTitles.add(ntmTitle);
Elements dates = tableRows.select("td:eq(2)");
String ntmDates = dates.get(i).text() + "\n";
arr_dataNtmDates.add(ntmDates);
Elements contents = tableRows.select("td:eq(3)");
String ntmContent = contents.get(i).text().replaceAll("\uFFFD", "") + "\n";
arr_dataNtmContents.add(ntmContent);
System.out.println(ntmContent);
}
更新1:
我尝试过:
.replaceAll("\u00BA", "\u00B0")
没有成功:(
更新2:
我回到了我为收集数据并将其插入数据库而编写的原始Java代码,我使用了以下代码替换了不需要的字符:
content = Content.text().replaceAll("[º°]", "°") +"\n";
并通过以下方式验证其正在履行职责:
content = Content.text().replaceAll("[º°]", "*") +"\n";
它确实有效,并将“序数”符号替换为我认为android会接受的符号(学位符号=°),但我仍然得到了这个:
51�42�.41N 004� 54�.61W
同样,这对于找到解决方案可能很重要,而且我以前没有注意到它(专注于序数符号),但我也在字符串中的其他位置获得了,如下所示:
2014年第41号坞锁工程1.特此通知海员。。。。
和
特此通知水手们,火线的部署是。。。。。
从这一点上我可以看出,有些显然是“空格”(41后面有2个空格),有些是“撇号”。
因此,我真的可以在这方面使用一些帮助,我已经尝试在将坏字符插入数据库之前清除它们,并在从PHP页面(在它们看起来应该做的页面上)解析它们之后清除它们,但没有效果。
在使用jsoup解析其他页面时,我是否缺少了一些东西?我没有遇到这个问题,我现在想,这与机器人无法显示字符无关,更多的是与它们如何插入或从数据库中出来有关?这就像是在过滤SQL注入或删除撇号之类的东西??
PHP脚本:
<?php
header('Content-Type: text/html; charset=utf-8');
$con=mysqli_connect("******","*******","*******","*******");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM **********");
echo "<table border='1' title='table1'>
<title>HTML Table With PHP</title>
<caption>*************</caption>
<tr>
<th>NTM ID</th>
<th>NTM TITLE</th>
<th>NTM DATE</th>
<th>NTM CONTENT</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['ntmID'] . "</td>";
echo "<td>" . $row['ntmTitle'] . "</td>";
echo "<td>" . $row['ntmDate'] . "</td>";
echo "<td>" . $row['ntmContent'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>