C# ASCII GetBytes 如何设置使用哪个字符进行无法识别的转换?
我正在将一些代码从本机 C++ 移植到 C#,我需要执行以下操作:
ASCII.GetBytes
当遇到无法识别的 unicode 字符时,它会返回十进制数 63 的字符(问号) )但在我的 C++ 代码中使用 WideCharToMultiByte(CP_ACP, ...
),当它遇到一个字符时,它不知道它使用的是十进制数 37(% 符号)的字符。
我的问题是我怎样才能使对于未知字符,ASCII.GetBytes 返回给我 #37 而不是 #63?
I am porting some code from native C++ to C# and I need to do the following:
ASCII.GetBytes
when it encounters a unicode character it does not recognize it returns to me character with decimal number 63 (question mark) but in my C++ code using WideCharToMultiByte(CP_ACP, ...
when it encounters a character it doesn't know it uses character with decimal number 37 (% sign).
My question is how can I make ASCII.GetBytes return to me #37 instead of #63 for unknown characters?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 C# 中,您可以使用编码的
DecoderFallback
/EncoderFallback
来决定其行为方式。您无法更改Encoding.ASCII
本身的回退,但您可以克隆它,然后设置回退。这是一个例子:In C#, you can use the
DecoderFallback
/EncoderFallback
of an encoding to decide how it will behave. You can't change the fallback ofEncoding.ASCII
itself, but you can clone it and then set the fallback. Here's an example:据推测,C++ 代码使用
lpDefaultChar = "%"
调用WideCharToMultiByte
。无法将其传递到
Encoding.GetBytes
调用中,但您可以使用 P/Invoke 调用WideCharToMultiByte
。Presumably the C++ code calls
WideCharToMultiByte
withlpDefaultChar = "%"
.There's no way to pass this into the
Encoding.GetBytes
call, but you could callWideCharToMultiByte
using P/Invoke.