首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET标准F#库没有正确存储非英语字符。

.NET标准F#库没有正确存储非英语字符。
EN

Stack Overflow用户
提问于 2018-06-09 23:11:30
回答 1查看 129关注 0票数 4

我用.NET 4.3.4 (我也用4.5进行了测试)用以下代码创建了一个F#标准F#库:

代码语言:javascript
运行
复制
namespace ClassLibrary2

module Say =
    let a = "国".Length.ToString()
    let b = sprintf "%A" ("国".ToCharArray() |> Array.map int)
    let c = "国"

当从另一个项目(.net核心或.net框架)引用该库时:

代码语言:javascript
运行
复制
Console.WriteLine(Say.a); // F# .net standard
Console.WriteLine(Say.b);
Console.WriteLine(Say.c == "国");

我得到以下输出:

代码语言:javascript
运行
复制
2
[|65533; 65533|]
False

等效的C# .NET标准库:

代码语言:javascript
运行
复制
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 = "国";
    }
}

给出预期的输出:

代码语言:javascript
运行
复制
1 
22269
True

这里有一个回购程序,展示了这个问题:https://github.com/liboz/Kanji-Bug

这看起来很可能是一个bug,但我想知道如何合理地解决这个问题?具体来说,我希望能够用类似于Say.c = "国"的东西来检查字符串的相等性,在这里,我可能在使用.NET标准库时使用非英语字符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 21:59:58

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档