.NET Standard F#库不能正确存储非英文字符

时间:2018-06-09 23:11:31

标签: c# f# localization .net-standard

我用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标准库时我可能会使用非英文字符。

1 个答案:

答案 0 :(得分:1)

因此,问题似乎是dotnet cli在F#库中生成的第一个文件不使用Unicode进行编码。因此,在创建.NET Standard F#库时,我的文件是使用Shift-JIS编码生成的,可能是由于我自己的计算机上的区域设置。因此,我的问题的解决方案是简单地手动保存带有UTF-8编码的默认Library1.fs文件,以便它与所有其他文件具有相同的编码。