如何在 Java 中生成随机基本多语言平面 (BMP) 字符串?

2024-02-21

我在用着RandomStringGenerator from commons-text1.2-SNAPSHOT 生成用于测试的随机用户名和密码。在带有 Chrome 驱动程序的 Selenium 中使用这些生成的字符串可能会导致

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 https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane已经具有现有函数的字符串,还是我必须采用显而易见的方法来研究所有 BMP 代码点以从中随机选择并冒着重新发明轮子的风险。

不是重复的如何处理“org.openqa.selenium.WebDriverException:ChromeDriver仅支持BMP中的字符”异常? https://stackoverflow.com/questions/31709140/how-to-handle-org-openqa-selenium-webdriverexception-chromedriver-only-support因为我也对用于其他目的的解决方案感兴趣。


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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中生成随机基本多语言平面 (BMP) 字符串? 的相关文章

随机推荐