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

C# Selenium发送Emoji报错:ChromeDriver仅支持BMP字符,求正确方案

解决C# Selenium发送Emoji的ChromeDriver异常问题

这个问题我之前调试代码时也踩过坑——ChromeDriver默认只支持BMP(基本多语言平面)的字符,而大部分Emoji属于补充平面字符(比如你用的👍是U+1F44D,不在BMP范围内),直接用SendKeys就会抛出你遇到的那个异常。你之前试的/u1F44D格式也不对,C#里的Unicode转义是\u开头,而且补充平面字符需要拆成代理对才能正确识别,咱们来一步步解决:

方法一:直接使用Emoji字面量或正确的代理对转义

C#支持直接在字符串中写入Emoji字符(只要你的代码文件编码是UTF-8),或者用对应的代理对转义序列:

// 方式1:直接写入Emoji字符
input.SendKeys("👍");

// 方式2:使用代理对转义(U+1F44D对应的代理对是\uD83D\uDC4D)
input.SendKeys("\uD83D\uDC4D");

补充说明:补充平面的Unicode字符(编码大于U+FFFF)需要拆分为两个16位的代理字符,你可以通过char.ConvertFromUtf32(0x1F44D)方法快速获取对应的代理对字符串。

方法二:使用Actions类发送字符

有时候直接调用元素的SendKeys会有兼容性问题,改用Actions类的模拟输入往往能解决:

Actions actions = new Actions(driver);
actions.SendKeys(input, "👍").Perform();

方法三:复制粘贴兜底方案

如果上面两种方法都不生效,可以用剪贴板+模拟粘贴的方式绕过ChromeDriver的字符限制:

// 将Emoji写入剪贴板
Clipboard.SetText("👍");
// 模拟Ctrl+V粘贴
input.SendKeys(Keys.Control + "v");

额外注意事项

  • 确保你的ChromeDriver和Chrome浏览器版本严格匹配,新版本的ChromeDriver对非BMP字符的支持已经优化了很多;
  • 如果你需要批量处理Emoji,可以封装一个工具方法,自动把UTF-32编码的Emoji转换为代理对字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:12:02