我用.NET 4.3.4 (我也用4.5进行了测试)用以下代码创建了一个F#标准F#库:
namespace ClassLibrary2
module Say =
let a = "国".Length.ToString()
let b = sprintf "%A" ("国".ToCharArray() |> Array.map int)
let c = "国"
当从另一个项目(.net核心或.net框架)引用该库时:
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标准库时使用非英语字符。
发布于 2018-06-12 21:59:58
因此,问题似乎是,dotnet在F#库中生成的第一个文件没有使用Unicode进行编码。因此,在创建.NET标准F#库时,该文件是使用Shift-JIS编码生成的,这可能是由于我自己的计算机上的区域设置所致。因此,我的问题的解决方案是手动保存使用UTF-8编码的默认Library1.fs
文件,这样它将具有与所有其他文件相同的编码。
https://stackoverflow.com/questions/50779282
复制相似问题