提问人:sadegh 提问时间:4/26/2023 最后编辑:sadegh 更新时间:5/8/2023 访问量:115
如何在带有utf8字符的富文本框中创建文件超链接?
How to create file hyperlink in rich text box with utf8 characters?
问:
我有一个丰富的文本框,我想在其上使用超链接,因此当用户单击它时,将打开网站链接或本地文件。在我上一个问题中,我说链接点击事件没有正常触发,这个问题解决了,但现在我又遇到了一个问题。
我尝试创建一个超链接,我的字符是 utf8(波斯语/阿拉伯语)。但是例如,当我写这篇文章时
سلام چطوری خوبم خوبی؟چه خبر؟
并选择“چه”作为链接文本,选择“C:\Users\sadegh\Desktop\16.txt”作为URL,结果是:
سلام چطوری خوبم خوبی؟ ??file://C:/Users/sadegh/Desktop/16.txt خبر؟
我该如何解决这个问题?我的代码是:
private void AddLinkBtn_Click(object sender, EventArgs e)
{
string url = null;
OpenFileDialog openFileDialog = new OpenFileDialog();
//openFileDialog.Filter = "Image Files (*.jpg;*.jpeg,*.png)|*.JPG;*.JPEG;*.PNG";
openFileDialog.Multiselect = false;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
url = openFileDialog.FileName;
}
if (!string.IsNullOrEmpty(url))
{
string linkText = TextBoxDefinition.SelectedText;
byte[] bytes = Encoding.UTF8.GetBytes(linkText);
linkText = Encoding.UTF8.GetString(bytes);
TextBoxDefinition.SelectedRtf = @"{\rtf1\utf8\field{\*\fldinst HYPERLINK ""file://" + url.Replace("\\", "/") + @""" }{\fldrslt" + linkText + "}}";
}
}
更新:我忘了说。我使用 .NET Framework 4.5。
答:
0赞
Reza Aghaei
5/8/2023
#1
您需要将波斯语 Unicode 字符替换为其代码点。例如,使用这篇文章中的方法,您可以插入如下链接:GetRtfUnicodeEscapedString
private void button1_Click(object sender, EventArgs e)
{
this.richTextBox1.SelectedRtf = @"{\rtf1" +
@"{\field{\*\fldinst{HYPERLINK https://google.com }}{\fldrslt{" +
GetRtfUnicodeEscapedString("سلام، من خوبم. تو خوبی؟ چه خبرا؟") +
@"}}" +
@"}}";
this.richTextBox1.LinkClicked += (obj, args) =>
{
MessageBox.Show(args.LinkText);
};
}
static string GetRtfUnicodeEscapedString(string s)
{
var sb = new StringBuilder();
foreach (var c in s)
{
if (c == '\\' || c == '{' || c == '}')
sb.Append(@"\" + c);
else if (c <= 0x7f)
sb.Append(c);
else
sb.Append("\\u" + Convert.ToUInt32(c) + "?");
}
return sb.ToString();
}
评论
0赞
Reza Aghaei
9/20/2023
Sadegh,你找到机会试一试了吗?
评论