ascii string
]のユニコード文字を逃がすいくつかのプログラミングシナリオでは、Unicode文字を脱出したASCII文字列に変換することは一般的な要件です。このプロセスにより、Unicode文字を保存することができます。そうしないと、エンコードプロセス中に失われたり、他の文字に置き換えられる場合があります。
たとえば、Unicode文字π(PI)を含む文字列は、脱出されたASCII形式(\ U03A0)に変換する必要があります。この変換により、文字列がUnicode文字をサポートしないシステムでエンコードされている場合でも、文字が保存されます。
これを行うには、文字列内の非ASCII文字を対応するエスケープシーケンスに置き換える必要があります。これらのエスケープシーケンスは、バックスラッシュ(\)に続いて、ユニコードコードポイントの16進表現で始まります。たとえば、πのユニコードコードポイントは03a0であるため、そのエスケープシーケンスは\ u03a0になります。
次のC#コードは、\ uxxxxエスケープ形式を使用して非ASCII文字をエンコードおよびデコードする方法を示しています:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string unicodeString = "此函数包含一个Unicode字符pi (\u03a0)";
Console.WriteLine(unicodeString);
string encoded = EncodeNonAsciiCharacters(unicodeString);
Console.WriteLine(encoded);
string decoded = DecodeEncodedNonAsciiCharacters(encoded);
Console.WriteLine(decoded);
}
static string EncodeNonAsciiCharacters(string value)
{
StringBuilder sb = new StringBuilder();
foreach (char c in value)
{
if (c > 127)
{
// 此字符对于ASCII来说太大
string encodedValue = "\\u" ((int)c).ToString("x4");
sb.Append(encodedValue);
}
else
{
sb.Append(c);
}
}
return sb.ToString();
}
static string DecodeEncodedNonAsciiCharacters(string value)
{
return Regex.Replace(
value,
@"\\u(?[a-zA-Z0-9]{4})",
m =>
{
return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
});
}
}
このコードでは、 encodenonasciicharacters
メソッドは入力文字列を横断し、非ASCII文字を認識し、それらをエスケープシーケンスに変換します。一方、 decodeencodednonasciicharacters
メソッドは正規表現を使用して逃げた文字列を解析し、元のユニコード文字に変換します。
このプログラムの出力はプロセスを示しています:
此函数包含一个Unicode字符pi (π)
此函数包含一个Unicode字符pi (\u03a0)
此函数包含一个Unicode字符pi (π)
]が含まれています 免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3