在c#中记录击键时,输入特殊字符时显示双重字符
我的应用程序可以记录任何用户按下的应用程序,但是当我将特殊字符(如´)按a>> a>获得á时,我会得到´´a;当我想获得à时,我会得到``a,因此所有特殊字符都会键入两次,然后在后面键入常规字符. 我一直在搜索过,真的找不到任何东西.但是我注意到问题在ToAscii方法中,没有该字符的键入正确. public string GetString(IntPtr lParam, int vCode) { try { bool shift = Keys.Shift == Control.ModifierKeys || Console.CapsLock; string value = ""; KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(
2 2024-04-16
编程技术问答社区
ASP.NET报价字符编码在设置控件属性时导致问题
我有一个ASP.NET Web应用程序,在某个时候我要这样做: mycontrol.stringparameterforjscript = "document.getElementById('" + myotherparam + "').value = 'Hello'"; 问题是这东西不起作用. 如您所见,在某些标签的某些情况下,将其设置为JavaScript.好吧,当页面重新列出时,问题是我的参数看起来像这样: 我必须确切地说,我要设置的这个文本框位于listView的insertitemtemplate内部,并且不太容易进行Intialize.因此,我插入了您在文本框的加载事件处理程序中看到的初始化代码.我可以说您一件事:如果此代码转介到页面上的文本框,并且我从页面的负
0 2024-04-16
编程技术问答社区
从字节数组转换为字符串时的奇怪结果
将字节数组转换为字符串,然后将字符串转换回字节数组时会得到奇怪的结果. 尝试以下操作: byte[] b = new byte[1]; b[0] = 172; string s = Encoding.ASCII.GetString(b); byte[] b2 = Encoding.ASCII.GetBytes(s); MessageBox.Show(b2[0].ToString()); 对我而言,结果不是我所期望的172,而是... 63. 为什么会发生? 解决方案 为什么会发生? 因为ASCII仅包含高达127的值. 面对给定编码无效的二进制数据时,Encoding.GetString可以提供替换字符,也可以抛出异常.在这里,它使用?的替换字符. 目前尚不清楚您要实现的目标,但是: 如果您将任意二进制数据转换为文本,请使用 Encoding.ASCII通常是一个不好的选择,当然包括17
0 2024-04-16
编程技术问答社区
串行端口-我如何设置字符?
考虑: Baud rate 19200 RTS on DTR on Data bits=8, Stop bits=1, Parity=None Set chars: Eof=0x00, Error=0x2A, Break=0x2A, Event=0x00, Xon=0x11, Xoff=0x13 Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL), XonLimit=0, XoffLimit=4096 好,所以使用端口扫描仪我发现USB设备需要这些设置来促进导入.我可以重新创建其中的大多数: port = new SerialPort("COM4"); port.DtrEnable = true; port.RtsEnable = true; port.Handshake = Handshake.None;
0 2024-04-16
编程技术问答社区
如何将UTF-8阿拉伯字母转换成CodePage 1001?
我有一个支持CodePage 1001阿拉伯语的Star Micronics TSP,如何使用C#将UTF-8转换为该特定代码页面? 更新:我发现CodePage 864与打印机兼容,我尝试发送十六进制值,并且得到了正确的字符, myPrinter.PrintNormal(PrinterStation.Receipt, "\xFE8D"); 我尝试了以下内容将字符串转换为codepage 864: Encoding enc = Encoding.GetEncoding(864); byte[] arr = enc.GetBytes("السلام"); 我在编码之后获得的字节ARR值是{63,63,63,63,63,63},它的值是错误的,甚至字节数是错误的,因为它是双字节字符. 解决方案 未经测试,但是: String s = Encoding.UTF8.GetString(bytes); Encoding enc = Encoding.GetEnc
0 2024-04-16
编程技术问答社区
编码为单字节的扩展ascii值
在c#中是否有一种方法可以将扩展的ASCII值(128-255)编码为其单个字节值,如下所示: http ://asciitable.com/ 我已经尝试使用Encoding.utf8.getBytes(),但这返回了扩展代码的多字节值.我不需要255岁以上的东西,但是至少支持这些东西会很好.我试图将文本数据发送到arduino运行和LED矩阵并想要处理重音字母的情况下,而无需处理多重字符. 编辑:要澄清,LED矩阵没有特定的编码.基本上是我所说的.其中没有内置的文本支持或Arduino.它只是一个愚蠢的128x8像素显示屏,控制器是按Pixel手动绘制文本像素的.因此,我实际上是为其提供字体(作为标题文件中的字节数组),并且可以使任何字符代码与我想要的任何输出相对应...因此,使用哪种代码并不是真正的问题哪一个会给我完整的8位角色. 解决方案 只需将代码页码传递到Encoding构造函数即可.如果您链接的是正确的"扩展ASCII"表,那将是 437 .. 但是
0 2024-04-15
编程技术问答社区
在utf-8 json上转义重音字符
下面的代码产生此输出: {"x": "Art. 120 - Incapacità di intendere o di volere"} 我需要对此进行更改,我想我在编码时要更改一些内容,但我不知道什么: {"x": "Art. 120 - Incapacit\u00e0 di intendere o di volere"} 代码: string label = "Art. 120 - Incapacità di intendere o di volere"; JObject j = new JObject(); j.Add(new JProperty("x", label)); string s = j.ToString(); Encoding encoding = new UTF8Encoding(false); string filename = @"c:\temp\test.json"; using (FileStream oFileStream = ne
0 2024-04-15
编程技术问答社区
什么是解码我的编码的哈希符号(%23)?
我们注意到有几台机器在Hash参数的URL方面存在问题. 用URL调试请求时: http://domain.com/Entity(%23{number-here} 我们在Application_BeginRequest global.asax文件中看到url: http://domain.com/Entity(#23{number-here} in Url.OriginalString和Url.LocalPath具有http://domain.com/Entity(,以及哈希(Hash in Url.Fragment>. )之后的所有字符 在运行Windows 8.1和IIS 8.5的计算机上运行完全相同的应用程序时,它可以按预期工作,Url.OrinalString是http://domain.com/Entity(%23{number-here}. 我在web.config或IIS配置中的URL重写部分中看不到任何可疑的内容. 这种行为的原因是什么?
0 2024-04-15
编程技术问答社区
删除/替换国际字符
我正在C#中创建一个小应用程序,以根据SQL查询传递的信息搜索文件名.在从SQL查询传递的数据中,有时会有(可能是由于我公司的国际访问者而导致的多个实例),其中包含国际角色.我们拥有的文件名在没有特殊字符的英语字母中. 我正在尝试找到一种将国际角色转换为纯英语字母字符的方法,以便我可以完成此搜索?可以通过数据库查询完成,还是必须通过应用程序代码完成? 例如: 需要转换为赫尔夫 或 Mañana需要转换为Manana 解决方案 var s1 = ToASCII("Hervé"); var s2 = ToASCII("Mañana"); string ToASCII(string s) { return String.Join("", s.Normalize(NormalizationForm.FormD) .Where(c => char.GetUnicodeCategory(c) != UnicodeCa
0 2024-04-15
编程技术问答社区
Encoding.GetEncoding(437).GetString()的错误?
我有以下测试程序 char c = '§'; Debug.WriteLine("c: " + (int)c); byte b = Encoding.GetEncoding(437).GetBytes("§")[0]; Debug.WriteLine("b: " + b); char c1 = Encoding.GetEncoding(437).GetString(new byte[] { 21 })[0]; Debug.WriteLine("c1: " + (int)c1); 这会产生以下结果: c: 167 b: 21 c1: 21 正如我所能看到的 167 in unicode => 21在CP437中 但是getstring无法正常工作 21在cp437 => 21中 中的21 这是一个错误还是我的错误? 对于0-31范围内的字符, 解决方案 CP437不是"双向".如您链接的Wikipedia页面中所述: 对于许多用途,范围0到31和代
0 2024-04-15
编程技术问答社区
C#方法来做URL编码?
我可以用什么C#类方法来编码URL字符串? 在我的用例中,我想将URL字符串作为URL参数本身传递.因此,就像将URL埋在URL中一样.没有一些编码"&"和"?"当处理外URL参数的参数 时,内部URL中的字符可以拾取 谢谢 解决方案 HttpUtility.UrlEncode HttpUtility.UrlEncode HttpUtility.UrlEncode 其他解决方案 System.Net.WebUtility.UrlEncode(str) 其他解决方案 HttpServerUtility.UrlEncode HttpServerUtility.UrlEncode 可能正是您要寻找的.
0 2024-04-14
编程技术问答社区
在C#中,将特殊字符如ü和Ã转换回其原始的拉丁字母对应物。
我已经从MySQL数据库中给出了导出,该数据库似乎随着时间的流逝,它的编码混乱,并包含HTML char codes的混合,例如& uuml;> & uuml;和更多的有问题的字符,代表相同的字母,例如ü>和Ã.我的任务是将一些一致性恢复到文件中,并将所有内容都带入正确的拉丁字符中,例如ú和ó. 我正在处理的字符串的示例 desinfektionslâ¶sungstーcherfãtAmrfthf f f f flflãflflãƒâ€chen 应该等于 50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen 50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen 在C#/.Net 4.5中是否有一种方法可以成功地将ü和Ã之类的方法重新编码为Ã?UTF-8? 其他建议什么方法?
0 2024-04-14
编程技术问答社区
我如何验证一个字符串是英文的?
我从控制台上读了一个字符串.我如何确保它仅包含英文字符和数字? 解决方案 假设"英语字符"您只是指26个字符的拉丁字母,这将是我使用正则表达式的领域:^[a-zA-Z0-9 ]*$ 例如: if( Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$") ) { /* your code */ } 在这种情况下,正则表达式的好处是,您真正关心的只是字符串是否与模式匹配 - 这是正则表达式出色地工作的模式.它清楚地捕获了您的意图,如果您对"英语字符"的定义扩展超出了26个字母,则很容易扩展. 有一个不错的在这里进行一系列文章教授更多有关正则表达式的文章. jørnschou-rode的答案提供了一个很好的解释,说明此处显示的正则表达方式如何匹配您的输入. 其他解决方案 您可以将其与此正则表达式相匹配:^[a-zA-Z0-9]*$ ^匹配字符串的开始(即在此点之前不允许字符) [a-zA-Z0-
0 2024-04-14
编程技术问答社区
C#中的char类型的大小
只是想知道为什么我们在c#(.net)中有2个字节大小的类型与其他编程语言不同? 不同? 解决方案 C#中的一个char是Unicode,因此可能的字符数超过255.因此,您需要两个字节. 扩展的ASCII例如具有255-Char集,因此可以存储在一个单个字节中.这也是System.Text.Encoding命名空间的全部目的,因为不同的系统可以具有不同的字符和字符尺寸.因此,C#可以处理一个/四/等. char字节,但Unicode UTF-16是默认的. 其他解决方案 我猜"其他编程语言" 您的意思是C. C实际上有两种不同的char类型:char和wchar_t. char可能是一个字节长,wchar_t不一定是. 在C#(和.NET)中,所有字符字符串均在UTF-16中编码为Unicode.这就是为什么A char in .NET代表单个UTF-16 代码单元,它可能是代码点或替代对的一半(实际上不是字符,那么). 其他解决方案 实际上C#,
0 2024-04-14
编程技术问答社区
将byte[]转换为char[]
如何将byte数组转换为c# 中的char数组 解决方案 System.Text.Encoding.ChooseYourEncoding.GetString(bytes).ToCharArray(); 替换上面的右右编码:例如 System.Text.Encoding.UTF8.GetString(bytes).ToCharArray(); 其他解决方案 您必须知道源编码. string someText = "The quick brown fox jumps over the lazy dog."; byte[] bytes = Encoding.Unicode.GetBytes(someText); char[] chars = Encoding.Unicode.GetChars(bytes); 其他解决方案 byte[] a = new byte[50]; char [] cArray= System.Text.Encoding.ASCII.G
0 2024-04-14
编程技术问答社区
为什么一个字节的ASCII值在铸成Int32时是不同的?
我正在创建一个程序,该程序将从文本文档中删除扩展ASCII字符.我试图了解C#如何解释不同的字符集和代码,并注意到一些奇数. 考虑: namespace ASCIITest { class Program { static void Main(string[] args) { string value = "Slide™1½”C4®"; byte[] asciiValue = Encoding.ASCII.GetBytes(value); // byte array char[] array = value.ToCharArray(); // char array Console.WriteLine("CHAR\tBYTE\tINT32"); for (int i =
0 2024-04-14
编程技术问答社区
rtf文件的编码
我得到一个代表RTF-File的base64编码字符串. 如果我查看原始文本表示(在base64编码之前),我会看到字符序列F¸r.当在观看者中显示时,这应该代表Für. RTF-File的标题包含ansicpg1252,因此应该是编码,除非另有更改(逃逸序列,字体定义,..). 我现在的问题是,我无法将基本64字符串正确解码为其原始表示形式.我再也不会得到F¸r了.相反,我有Für甚至F\'fcr.通过此,在观众中显示解码的RTF时,Umlaut的表示是错误的. 那么RTF文件的原始编码是什么?或这里出了什么问题? 您可以查看示例文件在这里. this 是我得到的基本64编码字符串. 编辑: 我没有编码的代码,但我认为我可以重建它.这是我的代码: string path = "/some/path/ltxt1 Kopie.rtf"; byte[] document = File.ReadAllBytes(path); string base64
0 2024-04-14
编程技术问答社区
如何在.NET中猜测一个没有BOM的文件的编码?
我正在使用类似的.NET中的StreamReader类: using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) { string filetext = reader.ReadToEnd(); } 当文件具有BOM时,这可以正常工作.我遇到了一个没有bom的文件遇到麻烦.基本上我很粗糙.当我指定encoding.unicode时,它可以正常工作,例如: using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) { string filetext = reader.ReadToEnd(); } 因此,我需要将文件内容输入字符串中.那么人们通常如何处理这个?我知道没有解决方案会有100%的时间工作,但是我想提高赔率.显然,那里有软件试图猜测
0 2024-04-13
编程技术问答社区
C#: 循环使用编码
我正在以各种格式和语言读取文件,我目前正在使用一个小型编码库来尝试检测正确的编码(这很好,但是偶尔仍然会错过. (多语言文件) 我的大多数潜在用户对编码的理解很少(我可以希望的是"它与角色有关"),并且不可能在列表中选择正确的编码,所以我想让他们循环浏览不同的编码,直到仅通过单击按钮才能找到右侧的编码. 显示问题?单击此处尝试其他编码! (无论如何,这就是这个概念) 实施这样的最佳方法是什么? 编辑:看起来我表达自己的表达不够清楚.通过"循环编码",我不是说"如何通过编码循环?" 我的意思是"如何让用户在不重新加载文件的情况下按顺序尝试不同的编码?" 这个想法更像是这样:假设文件加载了错误的编码.显示一些奇怪的字符.用户将单击一个按钮"下一个编码"或"以前的编码",并且字符串将在其他编码中转换.用户只需要继续单击,直到找到右手编码为止. (对用户来说,任何编码看起来都不错).只要用户可以单击"下一步",他就有一个合理的机会解决自己的问题. 我到目
0 2024-04-13
编程技术问答社区
从char到byte的转换中使用的编码
查看以下C#代码: byte[] StringToBytesToBeHashed(string to_be_hashed) { byte[] to_be_hashed_byte_array = new byte[to_be_hashed.Length]; int i = 0; foreach (char cur_char in to_be_hashed) { to_be_hashed_byte_array[i++] = (byte)cur_char; } return to_be_hashed_byte_array; } (上面的功能是从我的问题是:从字节到char的铸造在编码方面做什么? 我想它在编码方面确实没有任何作用,但是这意味着编码是使用的,因此返回的字节将取决于框架将如何编码特定操作中的基础字符串系统? 此外,炭实际上比字节大(我猜是2个字节),实际上会省略第一个字节? 我正在考虑通过以
0 2024-04-13
编程技术问答社区