gpt4 book ai didi

c# - .NET 中的字符串编码是如何确定的?

转载 作者:行者123 更新时间:2023-11-30 15:54:39 25 4
gpt4 key购买 nike

我在两台不同的计算机上运行完全相同的代码(和连接字符串等)(从源代码管理中获取)。

代码查询数据库(使用 Dapper),并从中读取字符串。

但是,关于重音的行为是不一样的。

在机器 A 上,数据库字符串 'régime' 被提取为 'régime'

在机器 B 上,数据库字符串 'régime' 被提取为 'r�gime' (U+FFFD)。

行为似乎是在编译时确定的(即如果我在机器 A 上编译代码并在机器 B 上运行它,它会正确读取字符串,如果我在机器 B 上编译它并在机器 B 上运行它答,它没有)。

我的想法已经用完了……有人能给我指出正确的方向吗?

最佳答案

来自 https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture(v=vs.110).aspx

In the .NET Framework 4 and previous versions, by default, the culture of all threads is set to the Windows system culture

接着说,在 4 之后的版本中,应用程序域的默认文化为空。接下来是:

Unless it is set explicitly, the value of the DefaultThreadCurrentCulture property is null, and the culture of threads in an application domain that have not been assigned an explicit culture is defined by the default Windows system culture.

这意味着如果您没有明确设置应用程序域的默认文化,所有继承该值的线程都将使用 Windows 系统文化设置,无论 .net 框架版本如何。

我怀疑您没有明确定义运行问题操作的线程的区域性。

在这种情况下,线程的文化基于在编译它的机器上定义的 Windows 系统文化。

尝试在两台有问题的机器上找到系统文化设置,并明确定义线程的文化。

特定于您问题的编码部分:

U+FFFD � REPLACEMENT CHARACTER used to replace an unknown, unrecognized or unrepresentable character

由于文化背景,此处的键无法表示。

关于c# - .NET 中的字符串编码是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com