C#中将字符串解析为ulong时抛出FormatException异常问题排查
问题原因及解决方案
核心问题
你定义的字符串变量data里包含了不可见的特殊控制字符(具体是U+202D从右到左覆盖字符),这些字符肉眼无法识别,但会被ulong.Parse()判定为非数字格式,从而抛出FormatException。
而你能正常运行的代码中,直接传入的"071926809"是纯数字字符串,没有隐藏字符,所以解析逻辑可以正常执行。
验证方法
你可以通过遍历字符串的每个字符,查看其Unicode编码来确认隐藏字符的存在:
string data = "071926809"; foreach (var c in data) { Console.WriteLine($"'{c}' - Unicode: U+{((int)c):X4}"); }
运行后会看到前两个字符的编码为U+202D,这就是导致解析失败的关键原因。
解决方案
- 手动清除隐藏字符,重新输入纯数字字符串:
string data = "071926809"; Console.WriteLine(ulong.Parse(data));
- 如果字符串来自外部来源(如复制粘贴),可以用正则表达式过滤掉非数字字符:
using System.Text.RegularExpressions; string data = "071926809"; // 仅保留字符串中的数字字符 string cleanedData = Regex.Replace(data, @"[^0-9]", ""); if (ulong.TryParse(cleanedData, out ulong result)) { Console.WriteLine(result); }
内容的提问来源于stack exchange,提问作者upender singh
相关产品推荐
相关产品推荐

