- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在本地桌面和 Azure 中运行时,我看到不同的 Unicode 字符作为“de-CH”区域性的数字组分隔符。
当以下代码在我的桌面上的 .NET Core 3.1 或 .NET Framework 4.7.2 中运行时,它会输出 2019
,它看起来像撇号,但并不相同。
在 Azure 中运行时,例如在 https://try.dot.net 中运行时或者(稍加修改)在 .NET Core 3.1(基于 Windows 的应用服务)上运行的 Azure 函数中,它会生成标准 ASCII 撇号 0027
。
using System;
using System.Linq;
using System.Globalization;
Console.WriteLine(((int)(CultureInfo
.GetCultureInfo("de-CH")
.NumberFormat
.NumberGroupSeparator
.Single())) // Just getting the single character as an int
.ToString("X4") // unicode value of that character
);
这样做的结果是尝试使用“de-CH”文化在本地桌面上解析字符串 4'200.000
(其中撇号是 Unicode 0027
)失败,但它可以在 Azure 中运行。
为什么会有差异?
最佳答案
Shawn Steele 的这篇 Microsoft 博客解释了为什么不应依赖稳定的特定文化设置(完整引用,因为它不再在 MSDN 上在线):
CultureInfo and RegionInfo data represents a cultural, regional, adminor user preference for cultural settings. Applications should NOTmake any assumptions that rely on this data being stable. The onlyexception (this is a rule, so of course there's an exception) is forCultureInfo.InvariantCulture. CultureInfo.InvariantCulture issupposed to remain stable, even between versions.
There are many reasons that cultural data can change. With Whidbeyand Custom Cultures the list gets a little longer.
- The most obvious reason is that there is a bug in the data and we had to make a change. (Believe it or not we make mistakes ;-)) In this case our users (and yours too) want culturally correct data, so we have to fix the bug even if it breaks existing applications.
- Another reason is that cultural preferences can change. There're lots of ways this can happen, but it does happen:
- Global awareness, cross cultural exchange, the changing role of computers and so forth can all effect a cultural preference.
- International treaties, trade, etc. can change values. The adoption of the Euro changed many countries currency symbol to €.
- National or regional regulations can impact these values too.
- Preferred spelling of words can change over time.
- Preferred date formats, etc can change.
- Multiple preferences could exist for a culture. The preferred best choice can then change over time.
- Users could have overridden some values, like date or time formats. These can be requested without user override, however we recommend that applications consider using user overrides.
- Users or administrators could have created a replacement culture, replacing common default values for a culture with company specific, regional specific, or other variations of the standard data.
- Some cultures may have preferences that vary depending on the setting. A business might have a more formal form than an Internet Café.
- An enterprise may require a specific date format or time format for the entire organization.
- Differing versions of the same custom culture, or one that's custom on one machine and a windows only culture on another machine.
So if you format a string with a particular date/time format, and thentry to Parse it later, parse might fail if the version changed, if themachine changed, if the framework version changed (newer data), or ifa custom culture was changed. If you need to persist data in areliable format, choose a binary method, provide your own format oruse the InvariantCulture.
Even without changing data, remembering to use Invariant is still agood idea. If you have different . and , syntax for something like1,000.29, then Parsing can get confused if a client was expecting1.000,29. I've seen this problem with applications that didn't realize that a user's culture would be different than the developer'sculture. Using Invariant or another technique solves this kind ofproblem.
Of course you can't have both "correct" display for the current userand perfect round tripping if the culture data changes. So generallyI'd recommend persisting data using InvariantCulture or anotherimmutable format, and always using the appropriate formatting APIs fordisplay. Your application will have its own requirements, so considerthem carefully.
Note that for collation (sort order/comparisons), even Invariantbehavior can change. You'll need to use the Sort Versioning to getaround that if you require consistently stable sort orders.
如果您需要自动解析格式为用户友好的数据,有两种方法:
尽可能避免解析用户友好格式的数字。相反,只要有可能,请尝试以严格定义的(不变)格式请求数字。
关于c# - 为什么 .NET "de-CH"区域性数字组分隔符在本地和 Azure 上不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63488299/
fiddle :http://jsfiddle.net/rtucgv74/ 我正在尝试将第一个字符与 3 位数字匹配。所以下面的代码应该提醒f234。但反而返回 null ? 源代码: var reg
复制代码 代码如下: Dim strOk,strNo strOk = "12312321$12
我想找 {a number} / { a number } / {a string}模式。我可以得到number / number工作,但是当我添加 / string它不是。 我试图找到的例子: 15
我,我正在做一个模式正则表达式来检查字符串是否是: 数字.数字.数字,如下所示: 1.1.1 0.20.2 58.55541.5221 在java中我使用这个: private static Patt
我有一个字符串,我需要检查它是否在字符串的末尾包含一个数字/数字,并且需要将该数字/数字递增到字符串末尾 +1 我会得到下面的字符串 string2 = suppose_name_1 string3
我正在寻找一个正则表达式 (数字/数字),如(1/2) 数字必须是 1-3 位数字。我使用 Java。 我认为我的问题比正则表达式更深。我无法让这个工作 String s ="(1/15)";
谁能帮我理解为什么我在使用以下代码时会出现类型错误: function sumOfTwoNumbersInArray(a: [number, number]) { return a[0] +
我看到有些人过去也遇到过类似的问题,但他们似乎只是不同,所以解决方案也有所不同。所以这里是: 我正在尝试在 Google Apps 脚本中返回工作表的已知尺寸范围,如下所示: var myRange
我试图了解python中的正则表达式模块。我试图让我的程序从用户输入的一行文本中匹配以下模式: 8-13 之间的数字“/” 0-15 之间的数字 例如:8/2、11/13、10/9 等。 我想出的模式
简单地说,我当前正在开发的程序要求我拆分扫描仪输入(例如:2 个火腿和奶酪 5.5)。它应该读取杂货订单并将其分成三个数组。我应该使用 string.split 并能够将此输入分成三部分,而不管中间字
(number) & (-number) 是什么意思?我已经搜索过了,但无法找到含义 我想在 for 循环中使用 i & (-i),例如: for (i = 0; i 110000 .对于i没有高于
需要将图像ID设置为数字 var number = $(this).attr('rel'); number = parseInt(number); $('#carousel .slid
我有一个函数,我想确保它接受一个字符串,后跟一个数字。并且可选地,更多的字符串数字对。就像一个元组,但“无限”次: const fn = (...args: [string, number] | [s
我想复制“可用”输入数字的更改并将其添加或减去到“总计”中 如果此人将“可用”更改为“3”,则“总计”将变为“9”。 如果用户将“可用”更改为“5”,则“总计”将变为“11”。 $('#id1').b
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我在 Typescript 中收到以下错误: Argument of type 'number[]' is not assignable to parameter of type 'number' 我
在本教程中,您将通过示例了解JavaScript 数字。 在JavaScript中,数字是基本数据类型。例如, const a = 3; const b = 3.13; 与其他一些编程语言不同
我在 MDN Reintroduction to JavaScript 上阅读JavaScript 数字只是浮点精度类型,JavaScript 中没有整数。然而 JavaScript 有两个函数,pa
我们在 Excel 中管理库存。我知道这有点过时,但我们正在发展商业公司,我们所有的钱都被困在业务上,没有钱投资 IT。 所以我想知道我可以用Excel自动完成产品编号的方式进行编程吗? 这是一个产品
我是一名优秀的程序员,十分优秀!