我使用F 4.3.4创建了一个.NET标准F库(我也使用4.5进行了测试),代码如下:
namespace ClassLibrary2
module Say =
let a = "å½".Length.ToString()
let b = sprintf "%A" ("å½".ToCharArray() |> Array.map int)
let c = "å½"
从另一个项目(.net core或.net framework)引用该库时:
Console.WriteLine(Say.a); // F# .net standard
Console.WriteLine(Say.b);
Console.WriteLine(Say.c == "å½");
我得到以下输出:
2
[|65533; 65533|]
False
等效的C.NET标准库:
using System;
using System.Linq;
namespace ClassLibrary1
{
public static class Class1
{
public static string a = "å½".Length.ToString();
public static string b = String.Join(", ", "å½".ToCharArray().Select(i => ((int)i).ToString()));
public static string c = "å½";
}
}
给出预期输出:
1
22269
True
这是一份显示问题的回购协议:
https://github.com/liboz/Kanji-Bug
.
这看起来可能是个bug,但我想知道这个问题的合理解决方案是什么?具体来说,我希望能够检查字符串的相等性,比如
Say.c =ã"å½"
在使用.NET标准库时,我可能会使用非英文字符。