我从MS SQL数据库中读取了一些值,我喜欢对字符串进行一些操作。这是我用来检查某些字符串是否以另一个字符串开头的代码:
String input = "Основното jавно обвинителство денеска поднесе пријава против БМ (59) од Битола заради постоење основи на сомнение дека сторил кривични дела „тешки дела против безбедноста на луѓето и имотот во сообраќајот“ и „неукажување помош на лице повредено во сообраќајна незгода“";
String subString = "Основното јавно обвинителство";
if (input.StartsWith(subString))
{
Response.Write("OK");
}
但是input.StartsWith(subString)
不会返回true。有人知道为什么吗?
答案 0 :(得分:24)
区别在于位置10中的字符j
:输入中的代码为106,但在子字符串中为1112(0x458
- 请参阅demo)。
您的第二个j
来自Unicode page 4
ј 1112 458 0xD1 0x98 CYRILLIC SMALL LETTER JE
看起来一样,但代码不同。
在j
中重新输入substring
可解决此问题。
答案 1 :(得分:10)
输入和subString中的第二个单词不匹配。将字符串放在notepad ++中并一次选择每个单词。 subString中的第一个和最后一个单词匹配但不匹配中间单词。
This sample演示了这个问题:
void Main()
{
var test = "Основното јавно обвинителство";
var tost = "Основното jавно обвинителство";
for(var i = 0; i < test.Length; i++){
Console.WriteLine(string.Format("1: {0}, 2: {1}, Equal: {2}", test[i], tost[i], test[i] == tost[i]));
if(test[i] != tost[i]){ Console.WriteLine (string.Format("1: {0}, 2: {1}", (int) test[i], (int) tost[i])); }
}
Console.WriteLine (test == tost);
}
相关产出:
1: ј, 2: j, Equal: False
1: 1112, 2: 106
答案 2 :(得分:6)
您发布的字符串不等于。这样做:
string s1 = "Основното јавно обвинителство";
string s2 = "Основното jавно обвинителство";
var bt = Encoding.UTF8.GetBytes(s1);
var bt_1 = Encoding.UTF8.GetBytes(s2);
输出类似于以下内容:
56
55
实际差异如下。第一个字符串中的“j”是:
[19] 209 byte
[20] 152 byte
而第二个字符串中的“j”是:
[19] 106 byte