首页 > 解决方案 > 来自 label.text 奇怪行为的字符串

问题描述

所以我有一个LabelWebService初始化的东西。我想看看该标签是否包含任何逗号。问题是,即使标签有逗号Contains()返回false,如果我做 a Split(),数组只有1 个元素长,包含整个 string

// text is "255,255,0,0"
string wat = myLabel.Text;
string[] wats = wat.Split(',');

// This IF never happens, for some reason
if (wat.Contains(","))
{
    anotherLabel.Text = wats[0] + " VS " + wats[1];
}

为什么不Split()工作Contains()?它可以是来自标签的字符串中的某种不同编码吗?如果我这样做wat = wat + ",",则Contains()返回True

标签: c#label

解决方案


Unicode 符号通常很奇怪。Unicode 有很多逗号,例如

string wat = "255,255,0,0"; // Full range commas

bool hasComma = wat.Contains(','); // false

如果wat.Contains(',')返回false,则分隔符不是逗号,。您可以通过string解码检查它:

string wat = myLabel.Text;

// Let's have a close look at wat: which characters (codes included) does it contain
MessageBox.Show(
  $"wat: [{wat}] encoded as {string.Join(" ", wat.Select(c => ((int)c).ToString("x4")))}");

你应该得到

wat: [255,255,0,0] 编码为 0032 0035 0035 002c 0032 0035 0035 002c 0030 002c 0030

如果检查你有什么字符代码而不是预期的002c


推荐阅读