[英]Render special character C#
我有一個字符串,有像這個例子的特殊字符 : 12345678912 \\ rJ \\ u0011因為我需要訪問這個特殊的字符來配置我的應用程序。 我想在TextBox字段中顯示這樣的字符串,所以我到目前為止嘗試的所有內容都會產生一個字符串,其中字符\
嘗試使用末尾的空字符進行渲染: "7896104866061\\rJ"
。
我做了這個,但它不起作用。
string result = Regex.Replace(
ToLiteral(this.Buffer),
"[^\x00-\x7Fd]",
c => string.Format("\\u{0:x4}", (int)c.Value[0]))
.Replace(@"\", @"\\");
public static string ToLiteral(string input)
{
using (var writer = new StringWriter())
{
using (var provider = CodeDomProvider.CreateProvider("CSharp"))
{
provider.GenerateCodeFromExpression(
new CodePrimitiveExpression(input),
writer,
null);
return writer.ToString();
}
}
}
我需要做什么? 提前致謝。
這里我的代碼片段顯示ctrl chars: https : //gist.github.com/TheTrigger/6efa6a8e42eedf1e61e0db8e9ef4360a
using System.Text;
namespace CtrlCharReplace
{
public static class Extensions
{
public static string ReplaceCtrl(this string s)
{
var sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
char c = s[i];
var isCtrl = char.IsControl(c);
var n = char.ConvertToUtf32(s, i);
if (isCtrl)
{
sb.Append($"\\u{n:X4}");
}
else
{
sb.Append(c);
}
}
return sb.ToString();
}
}
}
在調用ToLiteral
之前更換\\
with \\\\
,您將獲得所需的輸出。
string result = Regex.Replace(ToLiteral("12345678912\\rJ\\u0011".Replace(@"\", @"\\")), "[^\x00-\x7Fd]", c => string.Format("\\u{0:x4}", (int)c.Value[0]));
讓我們在循環中 構建字符串; 我們有幾類人物:
\\n
, \\t
, \\r
\\n
\
"
和\\
碼:
using System.Linq;
...
private static IReadOnlyDictionary<char, string> s_KnownControls = new
Dictionary<char, string>() {
{ '\0', "\\0"},
{ '\a', "\\a"},
{ '\b', "\\b"},
{ '\n', "\\n"},
{ '\v', "\\v"},
{ '\t', "\\t"},
{ '\f', "\\f"},
{ '\r', "\\r"},
};
public static string ToLiteral(string input) {
if (null == input)
return null;
StringBuilder sb = new StringBuilder();
foreach (var c in input) {
if (char.IsControl(c))
sb.Append(s_KnownControls.TryGetValue(c, out var s)
? s
: $"\\u{((int)c):x4}");
else {
if (c == '"' || c == '\\') // escapement
sb.Append('\\');
sb.Append(c);
}
}
return sb.ToString();
}
演示:
string[] tests = new string[] {
"12345678912\rJ\u0011",
"abc\tdef\t\0A\n\a\bB",
"abc\"def\"xyz\\pqr"
};
string report = string.Join(Environment.NewLine, tests
.Select(test => ToLiteral(test)));
結果:
12345678912\rJ\u0011
abc\tdef\t\0A\n\a\bB
abc\"def\"xyz\\pqr
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.