我用F#4.3.4创建了一个.NET Standard F#库(我还用4.5测试过),代码如下:
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。
这可能是一个错误,但我想知道这个问题的合理解决方法是什么?具体来说,我希望能够使用Say.c = "国"
来检查字符串的相等性,在使用.NET标准库时我可能会使用非英文字符。
答案 0 :(得分:1)
因此,问题似乎是dotnet cli在F#库中生成的第一个文件不使用Unicode进行编码。因此,在创建.NET Standard F#库时,我的文件是使用Shift-JIS编码生成的,可能是由于我自己的计算机上的区域设置。因此,我的问题的解决方案是简单地手动保存带有UTF-8编码的默认Library1.fs
文件,以便它与所有其他文件具有相同的编码。