C#:在shift-JIS中转换日文文本编码并以ASCII格式存储为UTF-8

wil*_*lvv 5 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);
Run Code Online (Sandbox Code Playgroud)

我明白了吗?`??? ????????????????? 作为日语字符串,因此我无法在网页上显示它.

任何光都会受到赞赏.

谢谢

Han*_*ant 9

一些字符串以ASCII格式存储在数据库中

它不是ASCII,关于ƒ`ƒƒƒlƒ中没有任何字符[ƒ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);
Run Code Online (Sandbox Code Playgroud)

产生"チャネルパートナーの选択"

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