我从一个简单的文本文件中读取搜索词以发送到搜索引擎。 它在英语中工作正常,但给了我????任何日文文本。 混合英语和日语的文本确实显示英文文本,所以我知道它正在阅读它。
我所看到的:
这是我在HTTP的POST字段中。 如果我将JMeter设置为对数据进行编码,则只需输入问号的百分比序列。
关于数据:
有趣的说明: 我注意到一个有趣的巧合:如果有15个日文字符,那么我会得到15个问号,所以在某些时候它被视为完整字符而不仅仅是字节。
JMeter CSV数据集配置:
我尝试过的一些事情: - 尝试允许引用的数据。它变成了其他奇怪的角色。 - 添加-Dfile.encoding = UTF-8 - 尝试编码POST阶段,但它只是变成了一堆%nn的问号
我不确定在读取每一行CSV之后是如何“调试”的。我认为它已经被破坏了,但我不确定。
如果它仅在我引用它时被破坏,那么代替$ {TERM}可能还有一些其他“to bytes”函数调用。我会开始检查那个。我还没有对JMeter函数做过任何事情。
12月24日编辑:
调整菜谱方案:
一个新理论:
答案 0 :(得分:3)
在搜索使用csv文件中的参数的解决方案时遇到了这个主题,该文件包含一些用希伯来语编写的列。
我使用Excel 2007为用户注册创建了1000行数据。第一个和最后一个名字必须是希伯来语。 我将文件导出到“Unicode文本”文件。它成为制表符分隔。 “Unicode Text”以UTF-16 LE(Little Endian)保存,而不是UTF-8。这很重要。
我在Notepad ++中打开了结果。我能正确地看到希伯来字母。 Notepad ++具有“编码”菜单项,您可以在其中检查编码或更改编码。所以我将Little Endian改为UTF-8。 然后我用逗号替换了标签(只需选中标签并将其粘贴到查找框中。
参数替换正常,但在运行脚本后,我看到以下内容: 在“查看结果树”监听器中,我打开了“Http请求”的“结果”选项卡。 参数被替换,但请求的HTTP视图选项卡(在底部)显示了一些胡言乱语。 但是当我查看Raw视图时,我看到请求参数实际上包含了%D7%A9%D7%A8%D7%9E%D7%95%D7%98%D7%94这些字符串成对时(%) D7%A9)核心应对希伯来字母。
在我看来,JMeter有一个错误,无法正确显示unicode字符。但它发送(POST)它们确定。
希望我是对的,并希望它会帮助某人。
答案 1 :(得分:2)
发现问题,还有另一个地方必须指定UTF-8。
在HTTP请求中,在Method的右侧,您还必须将内容编码设置为UTF-8
是的,事后看来,这似乎是显而易见的,但有很多原因我认为不需要这样做。我的一些不正确的假设可能对正在调试的其他人有所帮助,所以这里 - 我会想到:
1:一旦文本将其作为Unicode转换为Java,它将保持为Unicode,并通过UTF-8进入和退出。显然不是在这种情况下。
2:我认为HTTP默认为UTF-8,除非你另有说法,但也许我只是习惯于XML,但可能不是一个很好的做法来假设,也许HTTP默认为ISO-Latin1或者其他什么东西,或者即使有规格,也许人们不遵循它。
3:如果我没有具体说明,我认为“不伤害”的方法是传递角色,让接收者在另一端处理它。错了!
(好的,所以第1,2和3点重叠一点)
4:即使我的HTTP请求POST,我仍然尝试使用Encode复选框。我当然认为它会对它进行编码,但我得到的只是问号的重复%hex,所以在我看来数据已经在那时已经被破坏了。又错了。我怀疑在HTTP阶段,有两个字符转换,首先是从Unicode到它认为你拥有的任何编码,然后第二次编码到%符号,我的数据在第一步被错误编码。
5:我本以为JMeter会说些什么或发出警告,但从我的阅读来看,显然这在这方面没有帮助。你可以做日志记录等等。
和“?”是Java报告问题的方式默认情况下,这是从Java 1.4x时间框架开始的。在我的Java代码中,我更喜欢将编码错误设置为异常报告,但同样不是默认值,而不是JMeter所做的。
所以我吸取了教训。
Unicode至少开始OK的提示是问号的数量等于日文字符的数量,而不是问号的2或3倍。如果长度为“???”匹配您的日语(或中文)字符串,然后Java DID在旅途中的某个点查看实际的Unicode字符。然而,如果您看到输入文本的数量是输入文本的3倍,那么Java总是将它们视为字节或整数或其他任何内容,而且从不作为有效的代码点。
答案 2 :(得分:1)
您可以尝试在内容编码中使用“SHIFT-JIS”(它在附近的方法选择中)。那你应该取消选中“编码?”对于包含日语的参数。
希望它对你有用。