gpt4 book ai didi

java - 生成格式错误的字符串以进行测试

转载 作者:行者123 更新时间:2023-11-29 03:34:17 26 4
gpt4 key购买 nike

我正在使用并贡献一个库 ( https://github.com/neitanod/forceutf8) 来修复我们系统中的编码问题,并保证任何编码问题在显示给用户之前都会被透明地修复。

我需要一些测试用例,我想要的是一个接受 UTF-8 字符串并将其转换为格式错误的字符串的函数。然后我可以在我的库中运行它以确保它正确修复它:

// psuedocode
strings = [ '공', '人', '🔴', 'passé' ];

foreach ( string in strings )
malformed = garble( string )
print( string + " => " + malformed + "\n" )

以下是一些格式错误的字符串示例:

  • "人"--> 人
  • "ð´ "--> 🔴(红球——适用于 Safari)

这是原始的十六进制数据:

<?php
$strings = array( "人", "人", "ê³µ", "공", "ð´", "🔴" );
foreach ( $strings as $string )
echo " '$string' \t => '" . unpack( "H*", $string )[1] ."'\n";
?>

输出:

  • '人' => 'c3a4c2bac2ba'
  • '人' => 'e4baba'
  • 'ê³µ' => 'c3aac2b3c2b5'
  • '공' => 'eab3b5'
  • 'ð´' => 'c3b0c29fc294c2b4'
  • '🔴' => 'f09f94b4'

可以看到e4 ba ba,它的字符可以在几个c2之间的畸形字符串中找到像这样:

  • c3a 4 c2 ba c2 ba

我希望这已经足够清楚了。

生成字符串的一种方法是将它们插入 MySQL,然后再取出。

最佳答案

你可以像这样伪造和编码你的字符串:

import org.apache.commons.codec.binary.StringUtils;

[..]

private static void malformedStringTest() {
byte[] utf8bytes = StringUtils.getBytesUtf8(
"This is a test\n"
+ "人 人 ê³µ 공 ð´ 🔴\n"
+ "The above won't work.");
String asciistring = StringUtils.newStringUsAscii(utf8bytes);

System.out.println(asciistring);
}

它会输出:

This is a test
������ ��� ������ ��� ���� ����
The above won't work.

您可以调整此代码以逐个测试每个字符串。

另请参阅 org.apache.commons.codec.binary.StringUtils 的其他静态方法。

关于java - 生成格式错误的字符串以进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com