C#中调用非託管DLL,本地编码正常,但在英文操作系统struct内的string里中文内容都变为?,高手帮助啊!!

遊戲王千金 2013-03-14 03:54:18
出现这种C#中调用非託管DLL,本地编码正常,但在英文操作系统struct内的string里中文内容都变为?
第一反应是
在英文操作系统内找不到任何一个字符GB2312的内码,所以中文只能以“?”代替这个字符,

用 Encoding.Default.EncodingName.ToString()在英文系统调试输出: Western European (Windows)
注本地正常因为输出是简体中文(GB2312)

试过以下二种方式都无效
(1)在struct上添加 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
本地正常,英文操作系统还是“?”
(2)在struct上添加 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
本地乱码,英文操作系统乱码。

备注:
C
struct UserRecord
{
char name[128]; // name
..//略
C#


public struct UserRecord
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string name;
..//略

还在毫无思路,请高手帮助下..
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
遊戲王千金 2013-03-14
  • 打赏
  • 举报
回复
在该英文系统里打开有中文内容的txt,是没问题的。 关键是以下代码。执行后,不太好解释。

   UserRecord user = SetRecord.NewRecord();
    user.name = szCustomerName; //变量赋值给结构体的name
  ....//略调相关api做事情

   //用记事本保存参数
   using (StreamWriter writer = new StreamWriter(Server.MapPath("~/1.txt"), false, Encoding.UTF8))
                    {
                        writer.Write(DateTime.Now.ToString() + "\r\n Encoding.Default name:" + Encoding.Default.GetString(Encoding.Default.GetBytes(szCustomerName)) + "\r\n"
                            + "EncodingUTF8 name:" + Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(szCustomerName)) + "\r\n"
                            + "EncodingUnicode name:" + Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(szCustomerName)) + "\r\n"
                            + "读出name:" + user.name + "\r\n"
                            + "原值:" + szCustomerName + "\r\n");
                    }

读出name与Encoding.Default转换输入szCustomerName都是 ??(一个中文对应一个?号)
lanymy 2013-03-14
  • 打赏
  • 举报
回复
里面有中文 英文系统不认识中文 成乱码了 英文系统里 装中文就好了 界面还用英文就行 不影响
Architecture Net 2013-03-14
  • 打赏
  • 举报
回复
这种情况可能是你调用的dll中有中文字符的出现,可以考虑在英文系统中安装中文常用字体试试。
本数据集源自世界银行《世界发展指标》(World Development Indicators),系统收录了1975年至2024年间全球200多个国家和地区的年度股票市场交易总额(以当前美元计价),共计4,082条国家-年份观测记录。该指标衡量的是所有在国内交易所交易的股票(包括本国与外国上市公司)的总成交金额,计算方式为“成交量 × 成交价格”的总和,是反映金融市场活跃度与流动性的核心指标。 与静态的市值不同,“股票交易总额”聚焦于实际交易行为,能更真实地体现投资者参与度、市场深度及金融体系成熟度。数据已按年度标准化,覆盖高收入、等收入和低收入经济体,并包含区域汇总(如撒哈拉以南洲、东亚与太平洋等),便于开展跨国、跨区域或跨收入组别的比较研究。 典型应用场景包括: 分析股票交易活跃度与GDP增长、通胀、就业等宏观经济变量的关联 识别流动性快速提升的新兴市场,辅助投资决策 评估金融改革、监管政策或危机事件(如2008年金融危机、2020年疫情)对市场交易的影响 构建时间序列模型预测未来交易趋势 研究全球资本流动格局与金融市场一体化进程 该数据集结构清晰、缺失值极少、货币单位统一,适用于经济学研究、政策分析、金融建模及教学实践,是理解近半个世纪全球资本市场演变的重要基础资源。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧