【问题标题】:String to Ansicode Representation字符串到 Ansicode 表示
【发布时间】:2015-06-11 06:37:26
【问题描述】:

我需要将西里尔字符保存在 MSSQL 的 varchar 字段中。 为此,我需要将我的字符串转换为字节的 ansi 表示形式。

例如,如果我将 Notepad++ 中的编码从 Cyrillic 更改为 ANSI,则字符串将从 русский язык 更改为 ðóññêèé ÿçûê。 我在 c# 中找不到这样做的方法,encoding.getbytes 是正确的方法吗?

【问题讨论】:

  • 你不能使用 nvarchar 吗?
  • 不,该死的遗留应用程序:(
  • 您会考虑将数据以 UTF-8 格式存储在 base64 中吗?
  • @Telvan 这将起作用。从 UTF-16(.NET 内存中的字符串)到 ANSI 可能会截断字符,因此无法可靠地返回。如果您自己编写编码,您必须更新写入和读取数据的每个地方。
  • 执行此操作的基本方法是使用西里尔编码转到字节,然后使用 ansi 编码或其他任何返回字符串。在您复制 Notepad++ 所做的工作之前,您可能需要对该方案进行一些试验。此外,在某些情况下也会有损失。

标签: c# .net


【解决方案1】:

看看this answer

如果您确定该列中的字符串是始终 cryillic,那么您可以使用一种编码将字符串转换为字节数组,然后使用另一种编码将字节数组转换回字符串编码。我尝试了以下方法,它似乎有效:

var s = "ðóññêèé ÿçûê";
var b = Encoding.GetEncoding(1252).GetBytes(s);
var fixedString = Encoding.GetEncoding(1251).GetString(b);
Console.WriteLine(fixedString); // русский язык

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多