GVKun编程网logo

c# – 通过TcpClient(byte [])发送包含特殊字符的字符串(c#sendmessage发送字符串)

13

对于想了解c#–通过TcpClient(byte[])发送包含特殊字符的字符串的读者,本文将提供新的信息,我们将详细介绍c#sendmessage发送字符串,并且为您提供关于.net–使用Exchan

对于想了解c# – 通过TcpClient(byte [])发送包含特殊字符的字符串的读者,本文将提供新的信息,我们将详细介绍c#sendmessage发送字符串,并且为您提供关于.net – 使用Exchange Web服务发送包含特殊字符的电子邮件、android – 包含特殊字符的SQLite查询、android – 如何下载包含斯洛文尼亚特殊字符的字符串文件、C# XML字符串包含特殊字符的处理转换方法小结的有价值信息。

本文目录一览:

c# – 通过TcpClient(byte [])发送包含特殊字符的字符串(c#sendmessage发送字符串)

c# – 通过TcpClient(byte [])发送包含特殊字符的字符串(c#sendmessage发送字符串)

我正在尝试通过TcpClient(byte [])发送包含特殊字符的字符串.这是一个例子:

>客户在文本框中输入“amé”
>客户端使用特定编码将字符串转换为byte [](我已经尝试了所有预定义的加上一些像“iso-8859-1”)
>客户端通过TCP发送byte []
>服务器接收并输出使用相同编码重新转换的字符串(到列表框)

编辑:

我忘了提到结果字符串是“我?”.

编辑-2(根据要求,这里是一些代码):

@DJKRAZE这里有一些代码:

byte[] buffer = Encoding.ASCII.GetBytes("amé");
(TcpClient)server.Client.Send(buffer);

在服务器端:

byte[] buffer = new byte[1024];
Client.Recieve(buffer);
string message = Encoding.ASCII.GetString(buffer);
ListBox1.Items.Add(message);

列表框中显示的字符串是“am?”

===解决方案===

Encoding encoding = Encoding.GetEncoding("iso-8859-1");
byte[] message = encoding.GetBytes("babé");

更新:

只需使用Encoding.Utf8.GetBytes(“ééé”);奇迹般有效.

解决方法

我想回答一个问题永远不会太晚,希望有人能在这里找到答案.

C#使用16位字符,ASCII将它们截断为8位,以适合一个字节.经过一番研究,我发现UTF-8是特殊字符的最佳编码.

//data to send via TCP or any stream/file
byte[] string_to_send = UTF8Encoding.UTF8.GetBytes("amé");

//when receiving,pass the array in this to get the string back
string received_string = UTF8Encoding.UTF8.GetString(message_to_send);

.net – 使用Exchange Web服务发送包含特殊字符的电子邮件

.net – 使用Exchange Web服务发送包含特殊字符的电子邮件

尝试使用 Exchange Web Services Managed API针对Exchange Server 2010 SP1发送电子邮件时,如果收件人电子邮件地址(@的左侧)包含丹麦语字母æøå,则会引发ServiceException,其中包含ErrorCode ErrorInvalidRecipients.

这些字符是不允许在电子邮件地址的本地部分,还是我应该以某种方式编码地址?

更新:这是测试源代码和跟踪数据:

var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.AutodiscoverUrl("my@email.com");
EmailMessage email = new EmailMessage(service);
email.Body = "Test";
email.Subject = "Test";
email.ToRecipients.Add("æøå@domain.com");
email.Send();

来自EWS的跟踪数据显示以下内容:

请求标头:

POST /EWS/Exchange.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Accept: text/xml
User-Agent: ExchangeServicesClient/14.03.0032.000
Accept-Encoding: gzip,deflate

请求:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010_SP1" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem Messagedisposition="SendOnly">
      <m:Items>
        <t:Message>
          <t:Subject>Test</t:Subject>
          <t:Body BodyType="HTML">Test</t:Body>
          <t:ToRecipients>
            <t:MailBox>
              <t:EmailAddress>æøå@domain.com</t:EmailAddress>
            </t:MailBox>
          </t:ToRecipients>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

响应:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="14" MinorVersion="1" MajorBuildNumber="438" MinorBuildNumber="0" Version="Exchange2010_SP1" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:CreateItemResponseMessage Response>
          <m:MessageText>One or more recipients are invalid.</m:MessageText>
          <m:ResponseCode>ErrorInvalidRecipients</m:ResponseCode>
          <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
          <m:Items />
        </m:CreateItemResponseMessage>
      </m:ResponseMessages>
    </m:CreateItemResponse>
  </s:Body>
</s:Envelope>

最后,在Outlook中创建一个这样的地址的电子邮件给出了这样的信息:

解决方法

根据本文处理Exchange收件人解析,您可能需要使用此方法对这些字符进行编码:

Alphanumeric characters,the equal sign (=) and the hyphen (-) don’t
require encoding. Other characters use the following encoding Syntax:
A forward slash (/) is replaced by an underscore (_). Other US-ASCII
characters are replaced by a plus sign (+) and the two digits of its
ASCII value are written in hexadecimal. For example,the space
character has the encoded value +20.

http://technet.microsoft.com/en-us/library/bb430743(v=exchg.141).aspx

所以你的“æøå@domain.com”的例子将成为“e6 f8 e5@domain.com”

编辑:

如果地址的“域”部分使用特殊字符,则还需要使用不同的方法对其进行编码.

这是一个GetExchangeEncodedRecipient助手方法,我把它放在一起使用RFC 5321和RFC 3461规范对电子邮件地址进行编码.

public static string GetExchangeEncodedRecipient(string recipient) {
        int atIdx = recipient.LastIndexOf('@');

        if (atIdx < 0) {
            throw new ArgumentException("Unable to parse domain portion of \"recipient\" email address.");
        }

        string namepart = recipient.Substring(0,atIdx);
        string domainPart = recipient.Substring(atIdx + 1);
        //need to encode any special characters in the domain name
        System.Globalization.IdnMapping punycode = new System.Globalization.IdnMapping();
        domainPart = "@" + punycode.GetAscii(domainPart);

        return String.Concat(namepart.Select(c => GetExchangeEncodedChar(c))) + domainPart;
    }
    private static string GetExchangeEncodedChar(char c) {
        string encodedChar = c.ToString();
        int charaSCIICode = (int)c;
        //Encode according to RFC5321,https://tools.ietf.org/html/rfc5321#section-4.1.2
        //  which references rfc3461 "xtext" format. https://tools.ietf.org/html/rfc3461#section-4 
        if(charaSCIICode >= 33 && charaSCIICode <= 126 && c != '+' && c != '=')
        {
            //This is a character in the valid 33-126 ASCII range for email addresses,which does not need encoded.
            return c.ToString();
        }
        else if(c == '/'){
            //A forward slash (/) is replaced by an underscore (_).
            return "_";
        }
        else { 
            return "+" + ((int)c).ToString("x2").toupper();
        }
    }

然后,您可以使用GetExchangeEncodedRecipient对地址进行编码.这是一个例子:

string recipient = @"user1æøå@dømain.com";
string encodedAddress = GetExchangeEncodedRecipient(recipient);
Console.WriteLine("Original: {0},Encoded: {1}",recipient,encodedAddress);

对于上面的示例收件人,将输出:

Original: user1æøå@dømain.com,Encoded: user1+E6+F8+E5@xn--dmain-vua.com

如果您使用的“普通”电子邮件地址不包含“普通”ASCII范围之外的任何字符,那么它将返回相同的字符串.

Original: jsmith01@gmail.com,Encoded: jsmith01@gmail.com

android – 包含特殊字符的SQLite查询

android – 包含特殊字符的SQLite查询

我必须构建sqlite数据库,在那里我存储一些具有一些特殊字符的字符串,对于大多数情况,它工作查找除了这一个

SELECT * FROM table1 WHERE use_id = 3B:02

它抛出了这个错误

android.database.sqlite.sqliteException: near ":02": Syntax error (code 1):

当“3B:02”变化时,我该如何处理呢?

这是我的查询

selectQuery = "SELECT * FROM " + DataBaseHelper.TABLE_COM + " WHERE "
                + DataBaseHelper.COLUMN_USER_ID + " = " + value;

解决方法

sql中的字符串文字值必须在“单引号”中.

但是,最好使用?文字的占位符并绑定值,例如

Cursor c = db.rawQuery("SELECT * FROM " + DataBaseHelper.TABLE_COM + " WHERE "
            + DataBaseHelper.COLUMN_USER_ID + " = ?",new String[] { value });

android – 如何下载包含斯洛文尼亚特殊字符的字符串文件

android – 如何下载包含斯洛文尼亚特殊字符的字符串文件

我正在尝试下载包含斯洛文尼亚字符的json文件,在下载json文件作为字符串时,我将获得json数据中指定的特殊字符
"send_mail": "Po�lji elektronsko sporocilo.","str_comments_likes": "Komentarji,v�ecki in mejniki",

我正在使用的代码

URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
try {
    InputStream input1 = new BufferedInputStream(url.openStream(),300);
    String myData = "";
    BufferedReader r = new BufferedReader(new InputStreamReader(input1));
    StringBuilder totalValue = new StringBuilder();
    String line;
    while ((line = r.readLine()) != null) {
        totalValue.append(line).append('\n');
    }
    input1.close();
    String value = totalValue.toString();
    Log.v("To Check Problem from http paramers",value);
} catch (Exception e) {
    Log.v("Exception Character Isssue","" + e.getMessage());
}

我想知道如何正确下载字符.

解决方法

您需要将字符串字节编码为UTF-8.请检查以下代码:
String slovenianjsON = new String(value.getBytes([Original Code]),"utf-8");
JSONObject newJSON = new JSONObject(reconstitutedJSONString);
String javaStringValue = newJSON.getString("content");

我希望它会对你有所帮助!

C# XML字符串包含特殊字符的处理转换方法小结

C# XML字符串包含特殊字符的处理转换方法小结

为了能正常输出XML格式的内容,必须要对不被XML允许的那些特殊字符进行转换。本文介绍的正是如何使用C#判断XML字符串是否含特殊字符并进行转换。

以下是几个特殊字符的对应实体。

&lt;

小于号

&gt;

大于号

&amp;

&

&apos;

''

单引号

&quot;

"

双引号

在C#中,直接调用C#提供的方法,保存之后就会自动将特殊字符转为对应实体:

string s =System.Security.SecurityElement.Escape(s);

或者

将内容放在<![CDATA[ ]]>中,例如<![CDATA[2]]> ,CDATA里面的内容在XmlDocument 解析时会自动忽略掉

如果是很多有区域都有特殊内容,可以参考下面的代码通过函数来实现替换。

其实挺简单,只需用下面的这个函数,即可判断及转换XML字符串里的特殊字符。

核心代码

/// <summary>
/// Turns a string into a properly XML Encoded string.
/// Uses simple string replacement.
/// 
/// Also see XmlUtils.XmlString() which uses XElement
/// to handle additional extended characters.
/// </summary>
/// <param name="text">Plain text to convert to XML Encoded string</param>
/// <param name="isAttribute">
/// If true encodes single and double quotes, CRLF and tabs.
/// When embedding element values quotes don''t need to be encoded.
/// When embedding attributes quotes need to be encoded.
/// </param>
/// <returns>XML encoded string</returns>
/// <exception cref="InvalidOperationException">Invalid character in XML string</exception>
public static string XmlString(string text, bool isAttribute = false)
{
 var sb = new StringBuilder(text.Length);

 foreach (var chr in text)
 {
  if (chr == ''<'')
   sb.Append("&lt;");
  else if (chr == ''>'')
   sb.Append("&gt;");
  else if (chr == ''&'')
   sb.Append("&amp;");

  // special handling for quotes
  else if (isAttribute && chr == ''\"'')
   sb.Append("&quot;");
  else if (isAttribute && chr == ''\'''')
   sb.Append("&apos;");

  // Legal sub-chr32 characters
  else if (chr == ''\n'')
   sb.Append(isAttribute ? "&#xA;" : "\n");
  else if (chr == ''\r'')
   sb.Append(isAttribute ? "&#xD;" : "\r");
  else if (chr == ''\t'')
   sb.Append(isAttribute ? "&#x9;" : "\t");

  else
  {
   if (chr < 32)
    throw new InvalidOperationException("Invalid character in Xml String. Chr " +
             Convert.ToInt16(chr) + " is illegal.");
   sb.Append(chr);
  }
 }

 return sb.ToString();
}

被XML视为特殊字符的字符并不多,只有三个:<、&、>,因此只需把这三个字符进行转换即可,而对单双引号和换行符可转换也可不转换。

使用方法:

1、首先要导入命名空间System.Text;,因为要用到StringBuilder方法。

2、判断及转换字符串时直接使用函数XmlString(),如:

string sText = XmlString(sText);

如果要输出单双引号和换行符,那么要对这几个字符进行转义,则要这样使用函数:

string sText = XmlString(sText, true);

总结

通过上述方法的使用,在网页上输出XML格式字符串或者生成一个可用的XML文件,就不会再有问题了。

您可能感兴趣的文章:
  • C# WinForm开发中使用XML配置文件实例
  • c# winform读取xml文件创建菜单的代码
  • C# XML中的转义字符操作
  • c# RSA非对称加解密及XML&PEM格式互换方案
  • c# 读取XML文件的示例
  • C# 读写XML文件实例代码
  • C#操作XML文件步骤
  • C#使用XmlDocument或XDocument创建xml文件
  • C# xmlSerializer简单用法示例
  • C# 如何在WINForm程序中创建XML文件

关于c# – 通过TcpClient(byte [])发送包含特殊字符的字符串c#sendmessage发送字符串的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net – 使用Exchange Web服务发送包含特殊字符的电子邮件、android – 包含特殊字符的SQLite查询、android – 如何下载包含斯洛文尼亚特殊字符的字符串文件、C# XML字符串包含特殊字符的处理转换方法小结等相关知识的信息别忘了在本站进行查找喔。

本文标签: