中文字符替换为其unicode编码值小3的字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中文字符替换为其unicode编码值小3的字符相关的知识,希望对你有一定的参考价值。
参考技术A 获得用户输入的一个中文字符串,将所有中文字符替换为其Unicode编码值小3的字符,并在一行内打印输出结果。完善代码。答案:
ord(ch)-3 参考技术B 获得用户输入的一个中文字符串,将所有中文字符替换为其Unicode编码值小3的字符,并在一行内打印输出结果。 参考技术C 在设置字体的时候是有字体大小不一选择,在这个软件的编码过程中也是可以设置字符包括字号, 参考技术D 获得用户输入的一个中文字符串,将所有中文字符替换为其Unicode编码值小3的字符,并在一行内打印输出结果。完善代码。 答案: ord(ch)-3
将十六进制 unicode 字符转换为其可视化表示
【中文标题】将十六进制 unicode 字符转换为其可视化表示【英文标题】:Convert hexadecimal unicode character into its visual representation 【发布时间】:2011-09-27 16:52:18 【问题描述】:我正在尝试制作一个将 unicode 字符从其十六进制格式转换为单个字符的 C# 程序,但我遇到了问题。这是我的代码:
这行得通:
char e = Convert.ToChar("\u0066");
但是,这不起作用:
Console.WriteLine("enter unicode format character (for example \\u0066)");
string s = Console.ReadLine();
Console.WriteLine("you entered (for example f)");
char c = Convert.ToChar(s);
因为(Convert.ToChar("\\u0066"))
给出了错误:
字符串的长度必须正好是一个字符
有人知道怎么做吗?
【问题讨论】:
【参考方案1】:int.Parse 不喜欢 "\u" 前缀,但如果您先验证以确保它存在,则可以使用
char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber);
这会从输入字符串中去除前两个字符并解析剩余的文本。
为了确保序列是有效的,试试这个:
Regex reg = new Regex(@"^\\u([0-9A-Fa-f]4)$");
if( reg.IsMatch(s) )
char c = (char)int.Parse(s.Substring(2), NumberStyles.HexNumber);
else
// Error
【讨论】:
这也不完全是。它将允许解析\u a
和 \u1234567890
,它们都不是有效的 unicode 字符常量。
确实如此,因此需要先验证输入值。
@Steve:是的!!!!太感谢了!!实际上,验证前两个字符对我来说就足够了,因为如果序列以 \u 开头,它必须是正确的十六进制序列,因为我之前发现了不正确的序列。你拯救了我的一天:)
既然您使用正则表达式捕获了十六进制数字,为什么不使用捕获组(而不是调用子字符串并构建另一个字符串)?而且AllowHexSpecifier
仍然会比HexNumber
更好,忽略空格既没有必要也不可取。
检查规范 - 是的@Ben,我同意!尽管正则表达式将确保不存在空格,但无论如何。【参考方案2】:
Convert.ToChar("\u0066");
在运行时这是一个单字符的字符串,因为编译器处理了反斜杠序列。
您的其余代码处理六个字符串 '\\', 'u', '0', '0', '6', '6'
,Convert.ToChar
无法处理。
尝试char.Parse
(或者可能是Int16.Parse(s, NumberStyles.AllowHexSpecifier)
,然后转换为char
)。
【讨论】:
这些都不起作用,因为 char.parse 仍然只接受单个字符,而 Int16.Parse 不支持 unicode 说明符。 @Steve:嗯,你需要使用正则表达式或类似的方法从字符串中提取十六进制数字。以上是关于中文字符替换为其unicode编码值小3的字符的主要内容,如果未能解决你的问题,请参考以下文章