【问题标题】:How to produce random Basic Multilingual Plane (BMP) strings in Java?如何在 Java 中生成随机的基本多语言平面 (BMP) 字符串?
【发布时间】:2017-10-26 09:39:33
【问题描述】:

我正在使用来自commons-text 1.2-SNAPSHOT 的RandomStringGenerator 来生成随机用户名和密码以进行测试。将 Selenium 中生成的字符串与 Chrome 驱动程序一起使用会导致

org.openqa.selenium.WebDriverException: 
unknown error: ChromeDriver only supports characters in the BMP
  (Session info: chrome=62.0.3202.62)
  (Driver info: chromedriver=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4),platform=Linux 4.13.0-16-generic x86_64) (WARNING: The server did not provide any stacktrace information)

有没有办法用现有函数生成BMP 字符串,还是我必须采用显而易见的方法来研究所有 BMP 代码点以从中随机选择并冒重新发明轮子的风险。

不是How to handle "org.openqa.selenium.WebDriverException: ChromeDriver only supports characters in the BMP" exception? 的重复项,因为我也对其他用途的解决方案感兴趣。

【问题讨论】:

  • 这是编码问题吗?一方生产 UTF-16 而另一方期待 UTF-8(反之亦然)吗?
  • @rossum 我不知道如何解决这个问题。我添加了 BMP 维基百科文章的链接。你能?我会很感激的。
  • 这可能是编码问题。您是否在传递字符串之前将字符串显式编码为 UTF-8?
  • @Bill 这不是编码问题,它只是 Chrome 驱动程序的限制,仅支持 UTF-8 中不超过两个字节编码的 Unicode 代码点(来自 UCS-2 的字符)。跨度>

标签: java string selenium random apache-commons


【解决方案1】:

RandomStringGenerator 允许您创建按指定范围和过滤函数过滤的生成器。下面,在 Kotlin 中,是我用来生成与 Selenium 的 chrome 驱动程序兼容的随机 BMP unicode 字符串的函数。

如果您不关心随机字符串是否包含不可打印字符,则可以删除 filteredBy

private val randomBMPStringGenerator: RandomStringGenerator = RandomStringGenerator.Builder().withinRange(0x0000, 0xFFFF).filteredBy(CharacterPredicate {
    c ->
    val block: UnicodeBlock = UnicodeBlock.of(c)
    !Character.isISOControl(c) && block !== UnicodeBlock.SPECIALS
}).build()

randomBMPStringGenerator.generate(wordLength)

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 2018-02-03
    • 2016-09-06
    • 2011-02-21
    • 2012-04-03
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多