字符和符号替换为

时间:2014-08-14 23:52:35

标签: java php regex utf-8 character-encoding

我正在使用Jsoup从包含链接到我的数据库的php脚本的网页收集数据。我得到的数据包括这样的导航坐标:51°42'.41N 004°54'.61W

数据在网页上正确显示但是当我使用jsoup解析它并将结果字符串插入我的应用程序时,它们在字符串中的某些点包含替换字符U +FFFD ...像这样:

51 42 .41N004 54 .61W

我可以使用以下方法删除这些特价:

.replaceAll("\uFFFD", "")

然而,这导致了这个:

51 42 .41N 004 54 .61W

这不是很理想,因为它们是导航坐标。

Jsoup对此负责还是纯粹是Android无法显示这些字符? 是否有可能在将这些角色制作成'之前“捕获”这些角色所以我可以将它们与Android显示的类似东西相匹配?

例如,导航坐标中显示的字符是“序数”符号º,我可以用“度”符号°替换它。

附加:我用来收集数据的代码:

 //Get the Notices to Mariners Amount
            Element ntmNumber = tableRows.select("td:eq(0)").last();
            String ntmAmt = ntmNumber.text();

            System.out.println("NtmLoadingTask is Running");

            //In-case Data does not exist...
            if (tableRows != null) {//Exists...

                //Convert Ntm Number to int for Gathering the Ntm List
                int ntmInt = Integer.parseInt(ntmAmt);
                for (int i = 0; i < ntmInt; i++) {

                    //Get Ntm Titles
                    Elements titles = tableRows.select("td:eq(1)");
                    String ntmTitle = titles.get(i).text() + "\n";
                    arr_dataNtmTitles.add(ntmTitle);


                    //Get Ntm Dates
                    Elements dates = tableRows.select("td:eq(2)");
                    String ntmDates = dates.get(i).text() + "\n";
                    arr_dataNtmDates.add(ntmDates);

                    //Get Ntm Content
                    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

这也许对找到解决方案很重要,我之前没有注意到它(专注于Ordinal符号),但我也在字符串中的其他各个位置得到了 ,如下所示:

NO。 2014年第41期码头锁工程1. MARINERS特此建议.... 和

特此告知水手, 火线的部署是......

从中可以看出,有些人显然是一个“空间”(41之后有两个空格),有些则是“撇号”。 所以我真的可以在这方面使用一些帮助,我已经尝试清除坏字符,然后将它们插入到数据库中,并在从PHP页面解析它们之后(在页面上它们应该这样做)无济于事。 是否有一些我缺少的东西,因为用jsoup解析其他页面我没有遇到这个问题,我现在想的是,它与asroids无法显示字符有关,更多的是与它们的插入或来源有关走出数据库?它就像是过滤掉SQL注入或删除Apostrophes之类的东西?

PHP脚本:

<?php

header('Content-Type: text/html; charset=utf-8');

$con=mysqli_connect("******","*******","*******","*******");
// Check connection
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);
?>

1 个答案:

答案 0 :(得分:0)

在我的PHP中将charset更改为:charset = ISO-8859-1已停止了不良行为。

header('Content-Type: text/html; charset=ISO-8859-1');