C#中如何在\x转义序列中嵌入字符串,转义结果异常是什么原因
问题原因
\x转义序列是编译期处理的语法规则,不会和运行时的插值字符串内容合并解析。
你代码里的$"\x0{str2}{str3}"会被编译器按两个阶段拆分处理:
- 第一阶段:先解析字符串字面量内的转义序列,编译器只会识别字面量里写死在
\x后面的字符,此处\x后紧跟着的字面量字符只有0,符合\x转义最少1位、最多4位十六进制字符的规则,因此编译器直接把\x0解析为ASCII码为0的空字符(NUL)。 - 第二阶段:处理插值逻辑,把
str2、str3的运行时值拼接到第一步得到的空字符后面,最终得到的字符串是「空字符 + str2内容 + str3内容」,自然不会得到你预期的Unicode字符U+0D37(ഷ)。
正确实现方案
如果要在运行时动态拼接十六进制值并转换为对应字符,不要依赖编译期的\x转义,主动完成十六进制到字符的转换即可:
// 拼接得到完整的4位十六进制字符串 string hexCode = $"0{str2}{str3}"; // 将十六进制值转为整数后强转为对应字符 char targetChar = (char)Convert.ToInt32(hexCode, 16); // 生成最终字符串 string str = targetChar.ToString();
内容的提问来源于stack exchange,提问作者DitherDude
相关产品推荐
相关产品推荐

