.Net Core3.1 下

运行此段代码

    class Program
{
static void Main(string[] args)
{
// .NET Core 3.1
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
}
}

返回结果为 6

.Net5 下

运行同样代码

    class Program
{
static void Main(string[] args)
{
// .NET Core 3.1
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
}
}

返回结果为 -1

解决

全局

  • 依据

    • 在 MSDN: https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/globalization-icu 上有提到,并清楚的告知了如何去解决及如何恢复到老的版本。

      在过去,.NET 的全球化API 在不同的平台上会使用不同的底层工具包,比如:

      Unix 上的 全球化API 会调用 ICU 工具包 (International Components for Unicode)

      Windows 上的 全球化API 会调用 NLS 工具包 (National Language Support)

      不用的工具包呈现的行为肯定会有一些不一样,影响范围大致包括:

      本地化和本地化数据

      string 的一些操作 (转换,排序,查找)

      zone 和 IDN

2019年5月, windows 做了一个补丁升级,让后续的 .NET 全球化API 由原来的 NLS 切换到了 ICU 模式,这就是在后续的 .NET5 表现不一致的根源,如果你想退回到 NLS,需要做如下配置。

  • 修改project文件
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
  • 修改runtimeconfig.json
{
"runtimeOptions": {
"configProperties": {
"System.Globalization.UseNls": true
}
}
}
  • 新增环境变量 DOTNET_SYSTEM_GLOBALIZATION_USENLS = 1

局部

你可以使用 StringComparison.Ordinal 来指定字符串比较规则

            string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n",StringComparison.Ordinal);
Console.WriteLine(idx);

输出结果为 6

  • 通过以下代码 我们对各个枚举值进行比较
            string s = "Hello\r\nworld!";

            var comparisons = (StringComparison[])Enum.GetValues(typeof(StringComparison));
foreach (var item in comparisons)
{
Console.WriteLine($"{item}: {s.IndexOf("\n", item)}");
}

结果

可得 通过StringComparison.Ordinal/OrdinalIgnoreCase 可获取同样的Index

最新文章

  1. php中用foreach改变数组的值的问题
  2. Android HandlerThread 的使用及其Demo (转)
  3. 01shell入门基础
  4. GOCR.js – 使用 JS 识别出图片中的文本
  5. Python-执行系统命令
  6. SQLServer 数据导入导出 SSIS 包 位置
  7. Ubuntu配置java环境变量
  8. jquery的异步获取返回值为中文时乱码解决方法
  9. 【LeetCode】6 - ZigZag Conversion
  10. 【python】疯了,掉坑里出不来了
  11. Matlab无法打开M文件的错误( Undefined function or method &#39;uiopen&#39; for input arguments of type &#39;char)
  12. ***OneinStack交互安装FAQ和管理服务常用命令
  13. java重构四则运算
  14. JS中的数学方法
  15. Nand Flash 裸机程序
  16. LPCSTR与CString转换
  17. 在Windows 2008上安装Windows Mobile设备中心
  18. 关于hot miami的沙盒生存俯视角射击游戏
  19. IDEA开发工具常用快捷键总结
  20. mysql server has gone away的原因

热门文章

  1. Git的安装和配置 -入门
  2. vue3 封装简单的 tabs 切换组件
  3. 【剑指offer】42.和为S的两个数字
  4. PAT乙级:1063 计算谱半径 (20分)
  5. 简单快速安装Apache+PHP+MySql服务环境(三)—— 下载安装phpmyadmin
  6. kali操作系统安装google浏览器
  7. Python脚本:爬取天气数据并发邮件给心爱的Ta
  8. 大数据学习(11)—— Hive元数据服务模式搭建
  9. git合作开发流程
  10. 原生ajax练习-post&amp;xml