1

C#コードで「ö」を認識させるにはどうすればよいですか?

クエリの出力は素晴らしく、フォーマットされたすべての特殊文字が表示されますが、コードビハインドでは、それらを並べ替えに使用することはできません。

例:

if (link.Contains("teborg"))
{
    CountRss++;
    Response.Write("<p class='RssCont'><a href='" + link + "' target='new'><b>" + title + "</b></a><br/>");
    Response.Write(description + "</p>");
}

タイトルに「Göteborg」が含まれるいくつかの結果が得られますが、次のようになります。

if (link.Contains("Göteborg"))
{
    CountRss++;
    Response.Write("<p class='RssCont'><a href='" + link + "' target='new'><b>" + title + "</b></a><br/>");
    Response.Write(description + "</p>");
}

結果はまったく得られません。

4

2 に答える 2

0

あなたのコードは完全に賢明で、コードとして優れています。問題はデータにあります。ここには 4 つの一般的な可能性があります。

1つ目はエンコーディングの問題ですが、レンダリングが正常であるとあなたが言うように、これが事実であるとは思えないので、それが問題であるか、そこにも問題があるとは思えません.

2 つ目は、構成されたものと、その後に続く結合ダイアレシスöからö形成されたものとの間の競合です。oこれはありそうもありませんが、文字列を NFC に入れるとlink.Normalize()それがキャッチされます。

3 つ目は、これは URI であるため、IURI 形式ではなく URI である可能性があることです。そのようになります(実際、 、またはG%c3%b6teborgである可能性があります)。またはさまざまな方法のいずれかを使用して、文字列のエスケープを解除します。これは私が賭けたいものです。G%C3%b6teborgG%c3%B6teborgG%C3%B6teborgUri.UnescapeDataString(link)

4 つ目は、XML でエスケープされる可能性があることです (使用されている名前から判断するのは RSS からのものであるため)。その場合、HtmlDecode他のエンティティを定義する DTD を禁止するものとして分類する必要があります。HTML のエンコーディングは、XML のエンコーディングのスーパーセットです。ただし、これは、RSS を XML ベースではなくテキスト ベースの方法で解析している場合にのみ可能です。この場合、より大きな問題が発生します。XmlReader または XmlDocument またはその他の XML ベースのクラスを使用している場合、このデコードは必要に応じて既に行われているため、問題はありません。

したがって、3 番目が最も可能性が高く、Uri.UnescapeDataString(link)最も有望なようです。

char の大文字と小文字を区別する正確な char という精度の低いチェックが必要になる場合があります。göteborg他の方法でも一致させることができますGÖTEBORG。たとえば一致するものもありますgoeteborg(英語で音訳öするのが一般的oeです。これはスウェーデン語よりもドイツ語で行われることが多いですが、それでも行われる可能性があります)。Gothenburg(たとえば、英語またはデンマーク語のマッチングGøteborgは、はるかに複雑な問題です)。

于 2012-08-18T10:06:17.650 に答える
0

コードがリンクを正しくレンダリングする場合は、エンコードする必要があり、その結果、非 ASCII 文字は含まれません。

URL 内の単語の位置によっては、一致を見つけるために別のテキストを検索する必要がある場合があります。

適切な Uri クラスを使用して URL を処理すると、作業が楽になることに注意してください。また、ページへのスクリプト インジェクション攻撃を避けるために、リンクが正しくエンコードされていることを確認してください。

于 2012-08-18T08:30:03.513 に答える