You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取UTF8 XML存入MySQL的编码乱码问题求助

解决UTF8 XML读取及MySQL存储乱码问题

1. 修正文件读取与编码转换逻辑

你的XML文件为UTF8编码,需用对应编码读取,且必须移除所有多余的编码转换操作——C#的string本质是Unicode(UTF-16),直接使用解析后的字符串即可,反复转字节再解码会直接破坏字符编码。

修改读取解析代码:

foreach (string file in Directory.EnumerateFiles(@"C:\xml_folder\" + sub_folder, "*.xml")) {
    // 直接用XDocument.Load读取文件,自动识别XML声明中的编码,比先读文本再解析更可靠
    var document = XDocument.Load(file);
    foreach (var child in document.Root.Elements("result")) {
        string name_it = "";
        string name_en = "";
        string name_ru = "";
        // 其他语言变量初始化...
        
        foreach (var translationsChild in child.Elements("translations"))
        {
            string lang = translationsChild.Element("language")?.Value ?? "";
            string nameValue = translationsChild.Element("name")?.Value ?? "";
            
            switch (lang)
            {
                case "it":
                    name_it = nameValue; // 直接赋值,无需任何编码转换
                    break;
                case "en-gb":
                    name_en = nameValue;
                    break;
                case "ru":
                    name_ru = nameValue;
                    break;
                // 其他语言分支...
            }
        }
        // 后续数据库插入逻辑
    }
}

2. 配置数据库连接字符集

MySQL连接时必须明确指定字符集,否则即使字段编码正确,连接默认编码不匹配也会导致乱码。在连接字符串中添加CharSet=utf8mb4(推荐,兼容所有Unicode字符)或CharSet=utf8:

string connString = "server=localhost;database=your_db;user=root;password=your_pwd;CharSet=utf8mb4;";

注:MySQL的utf8实际是utf8mb3,仅支持Unicode基本平面字符;utf8mb4支持全量Unicode字符,兼容性更强。

3. 确认表字段编码兼容性

虽然你提到字段为utf8_general_ci,可通过SQL语句再次验证并升级编码(可选但推荐):

ALTER TABLE cities MODIFY COLUMN name_it VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE cities MODIFY COLUMN name_ru VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4. 调试与验证

插入数据库前,先在控制台输出变量值确认解析结果正确。若控制台显示乱码,可临时修改控制台编码:

Console.OutputEncoding = Encoding.UTF8;

内容的提问来源于stack exchange,提问作者user21611183

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:15:37