擅长:python、mysql、java
<p>正如在<a href="https://stackoverflow.com/a/59416410/3319460">https://stackoverflow.com/a/59416410/3319460</a>中提到的,您的输入实际上并不代表您所寻求的输出。当然,为了满足您的需求,我们可以对输入设置语义,以便</p>
<ul>
<li>允许数字或<code>'.'</code>符号,跳过其他符号</li>
<li>如果字节是非ASCII字符,例如前四个字节是否为<code>0xB</code>。如果是这样的话,那么我们将只取字节的ASCII部分(<code>b & 0b01111111</code>)</li>
</ul>
<p>用Python很容易做到这一点。你知道吗</p>
<pre><code>def _filter(char):
return char & 0xF0 == 0xB0 or chr(char) == "." or 48 <= char <= 58
def filter_xbchars(value: bytes) -> str:
return "".join(chr(ch & 0b01111111) for ch in value if _filter(ch))
import pytest
@pytest.mark.parametrize(
"value, expected",
[(b"S\xa0S\xa0\xa0\xa0\xa0\xa0\xa0\xb23.6\xb7\xa0\xe7\x8d\n", "23.67")],
)
def test_simple(value, expected):
assert filter_xbchars(value) == expected
</code></pre>
<p><strong>请注意</strong>尽管上面的代码满足<em>要求</em>但这是一个描述不好的任务的例子,因此是一个非常荒谬的解决方案。代码按照您的要求解决了任务,但我们应该首先重新考虑它是否有意义。我建议您检查您要测试的数据和数据的含义(协议)。你知道吗</p>
<p>祝你好运:)</p>