C#:将 shift-JIS 中的日文文本编码并存储为 ASCII 转换为 UTF-8

标签 c# encoding

我正在尝试转换一个旧应用程序,该应用程序在数据库中将一些字符串存储为 ASCII。

例如字符串:ƒ`ƒƒƒlƒ‹ƒp[ƒgƒi[‚Ì‘I‘ð存储在数据库中。

现在,如果我在文本编辑器中复制该字符串并将其另存为 ASCII,然后在 Web 浏览器中打开该文件并将其设置为自动检测编码,我会得到正确的日文字符串:チュネルパートナーの选択,页面显示检测到的编码是日语 (Shift_JIS)。

当我尝试在 C# 代码中执行类似这样的转换时:

var asciiBytes = Encoding.ASCII.GetBytes(text);
var japaneseEncoding = Encoding.GetEncoding(932);
var convertedBytes = Encoding.Convert(japaneseEncoding, Encoding.ASCII, asciiBytes);
var japaneseString = japaneseEncoding.GetString(convertedBytes);

我得到 ?`???l???p?[?g?i?[???I??作为日文字符串,因此我无法在网页上显示它。

任何光将不胜感激。

谢谢

最佳答案

some strings stored in the database as ASCII

它不是 ASCII,关于 ƒ`ƒƒƒlƒ‹ƒp[ƒgƒi[‚Ì‘I‘ð 中的所有字符都不是 ASCII。 Encoding.ASCII.GetBytes(text) 会产生很多吧?字符,这就是为什么你有所有这些问号。

核心问题是 dbase 列中的字节是用错误的编码读取的。您使用了代码页 1252:

var badstringFromDatabase = "ƒ`ƒƒƒlƒ‹ƒp[ƒgƒi[‚Ì‘I‘ð";
var hopefullyRecovered = Encoding.GetEncoding(1252).GetBytes(badstringFromDatabase);
var oughtToBeJapanese = Encoding.GetEncoding(932).GetString(hopefullyRecovered);

产生“チュネルパートナーの选択”的地方

这不会完全可靠,代码页 1252 中有一些未分配的代码用于 932。您最终会得到一个乱码字符串,您无法再从中恢复原始字节值。您需要专注于让数据提供者使用正确的编码。

关于C#:将 shift-JIS 中的日文文本编码并存储为 ASCII 转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19919439/

相关文章:

.net - 在 Sql server 2005 中过滤 unicode 列 - 多数据匹配

string - 什么是 Pascal 风格的字符串?

c# - puppeteer 师夏普 : Multiple Browsers Concurrently

c - 如何用C语言将单个位写入文件

c# - 设置 <form action> 属性时 LinkBut​​ton 事件不会触发

c# - 我们如何创建 AsymmetricSecurityKey?

java - Android Studio SDK 路径包含重音符号

PHP 编码希伯来语

c# - 需要硬编码密码

c# - WM_QUERYENDSESSION 给我带来了问题