获取文本时,可能会导致中文编码错误的问题。

BUG反馈 · 40 次浏览
Anlv 创建于 18天12小时前




$= 
var clipboardData = Clipboard.GetDataObject(); 
string[] formats = clipboardData.GetFormats(); 

//在此处指定流读取时的默认编码,常用:Encoding.UTF8, Encoding.Default (系统ANSI/GBK), Encoding.GetEncoding("GB2312")
var streamEncoding = Encoding.UTF8; 

// --- 优先尝试获取 Unicode 文本 (解决乱码的关键) ---
if (clipboardData.GetDataPresent("UnicodeText"))
{
    string txt = (string)clipboardData.GetData("UnicodeText");
    _context.SetVarValue("type", "text");
    _context.SetVarValue("text", txt);
    return txt;
}
// --- 其次尝试普通文本 ---
else if (clipboardData.GetDataPresent("Text"))
{
    string txt = (string)clipboardData.GetData("Text");
    _context.SetVarValue("type", "text"); // 这里可能获取到的是 ANSI 文本
    _context.SetVarValue("text", txt);
    return txt;
}
// --- 图片 ---
else if (clipboardData.GetDataPresent("Bitmap")) 
{ 
    _context.SetVarValue("type","img"); 
    return (System.Drawing.Bitmap)clipboardData.GetData("Bitmap"); 
} 
// --- Quicker 动作步骤 ---
else if (clipboardData.GetDataPresent("quicker-action-steps")) 
{ 
    _context.SetVarValue("type","qk-step"); 
    string txt = (string)clipboardData.GetData("quicker-action-steps");
    _context.SetVarValue("text", txt); 
    return txt; 
} 
// --- Quicker 子程序 ---
else if (clipboardData.GetDataPresent("quicker-subprogram-item")) 
{ 
    _context.SetVarValue("type","qk-sub"); 
    string txt = (string)clipboardData.GetData("quicker-subprogram-item");
    _context.SetVarValue("text", txt); 
    return txt; 
} 
// --- Quicker 轮盘动作 ---
else if (clipboardData.GetDataPresent("quicker-circle-menu-action")) 
{ 
    _context.SetVarValue("type","qk-circle"); 
    // 注意:ToJson() 是扩展方法或Quicker内部方法,确保环境支持
    var obj = clipboardData.GetData("quicker-circle-menu-action");
    // _context.SetVarValue("text", obj.ToJson()); 
    // return obj.ToJson(); 
    return obj; // 建议直接返回对象或确认 ToJson 可用
} 
// --- Quicker 轮盘配置 ---
else if (clipboardData.GetDataPresent("quicker-circle-menu-config")) 
{ 
    _context.SetVarValue("type","qk-circle-config"); 
    string txt = (string)clipboardData.GetData("quicker-circle-menu-config");
    _context.SetVarValue("text", txt); 
    return txt; 
} 
// --- 文件 ---
else if (clipboardData.GetDataPresent("FileDrop")) 
{ 
    _context.SetVarValue("type","file"); 
    return (string[])clipboardData.GetData("FileDrop"); 
} 
// --- 通用流处理 (MemoryStream) ---
else 
{ 
    // 尝试获取第一个格式的内容
    string format = formats.FirstOrDefault();
    if (format != null && clipboardData.GetData(format) is System.IO.MemoryStream)
    {
        _context.SetVarValue("type", format); 
        var memoryStream = (System.IO.MemoryStream)clipboardData.GetData(format); 
        memoryStream.Position = 0; 
        byte[] buffer = new byte[memoryStream.Length]; 
        memoryStream.Read(buffer, 0, buffer.Length); 
        
        // 使用前面定义的编码进行转换
        return streamEncoding.GetString(buffer); 
    }
    else
    {
        _context.SetVarValue("type", "others"); 
        return clipboardData; 
    }
}

回复内容
暂无回复
回复主贴