C# 在C中将字符串转换为有效编码的最佳方法#

C# 在C中将字符串转换为有效编码的最佳方法#,c#,dll,encoding,utf-8,C#,Dll,Encoding,Utf 8,如果您有重复或简单的问题,请提前道歉!我找不到答案 我正在使用Delphi制作的dll。可以使用DLL将数据发送到设备。但是,在发送数据时,某些字符串不被接受或写入为空。发送到设备的数据存储在txt文件中。它是使用txt文件生成的第三方程序。 也就是说,我认为字符串的格式是不确定的。如果我以utf-8格式发送,它将接收所有信息。但是当时有一些字符串保留。 我的许多文字都是西里尔字母。 我所做的: // string that send to device [MarshalAsAttribute(

如果您有重复或简单的问题,请提前道歉!我找不到答案

我正在使用Delphi制作的dll。可以使用DLL将数据发送到设备。但是,在发送数据时,某些字符串不被接受或写入为空。发送到设备的数据存储在txt文件中。它是使用txt文件生成的第三方程序。 也就是说,我认为字符串的格式是不确定的。如果我以utf-8格式发送,它将接收所有信息。但是当时有一些字符串
保留。
我的许多文字都是西里尔字母。
我所做的:

// string that send to device
[MarshalAsAttribute(UnmanagedType.LPStr, SizeConst = 36)]
  public string Name;
当我这样做时,设备只接收到100个数据中的10个。 如果我使用UTF-8编码:

byte[] bytes = Encoding.Default.GetBytes(getDvsName[1].ToString());
string res = Encoding.UTF8.GetString(bytes);
以这种方式获取所有数据,但太多的字符串变成了
。
我也试过这样:

static private string Win1251ToUTF8(string source)
{
  Encoding utf8 = Encoding.GetEncoding(«utf-8»);
  Encoding win1251 = Encoding.GetEncoding(«windows-1251»);
  byte[] utf8Bytes = win1251.GetBytes(source);
  byte[] win1251Bytes = Encoding.Convert(win1251, utf8, utf8Bytes);
  source = win1251.GetString(win1251Bytes);
  return source;
}

上述所有方法都没有帮助。如何接收正确格式的传入信息?还有其他方法吗?

您好,这里是出了什么问题,您将字符串编码为默认值而不是utf8

string tom = "ටොම් හැන්ක්ස්";

byte[] bytes = Encoding.UTF8.GetBytes(tom);
string res = Encoding.UTF8.GetString(bytes);

如果试图获取字节[]的字符串表示形式,则需要使用
Convert.ToBase64String
。是否尝试过编码.Unicode?DLL文档是否指明了它使用的编码类型?听起来您应该通过二进制数据(
byte[]
)而不是字符串与DLL通信。“重新编码”一个字符串总是一个丢失的原因,因为当您得到断开的字符串时,您通常已经丢失了数据。@B.O.B.文档中没有关于编码的内容。在文档中包含为
公共字符串名称;//产品名称,仅36个字符。
。在不了解您试图与之交互的API的情况下,我们不确定是否可以提供更多帮助。如果没有关于API的更多信息,我只能问一件事:你确定它是LPSTR吗?()如果您正在吞食字符,则可能是类似LPWSTR()的其他内容。当在.Net中使用非.Net DLL时,有许多不同类型的字符串…结果是一样的。我测试了它,它在我的设备上确实起了作用。