请问System.Text.Encoding.Default能设置吗?

kingser 2006-02-23 10:00:08
现在这个属性是只读的,我在控制面板里面改了区域和预言选项
这个值就会相应的改变,但是每次改动都要重启,很头痛
不知道在.net开发工具里面,有什么地方可以设置这个缺省的encoding
...全文
2088 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
din1001 2006-02-24
  • 打赏
  • 举报
回复
又想了下,你的问题好像可以理解为调用Object对象的ToString方法的时候怎么才能ToString到指定的编码方式而不是默认的编码.
1.此帖标题,呵呵。修改默认编码方式ToString完了再改回来
2.方法2
Encoding shiftJIS=Encoding.GetEncoding("Shift-JIS");
//取默认编码转换后String的Byte数组
byte[] defEncByte=Encoding.Default.GetBytes(rs["myText"].ToString());
//Convert方法转换此默认编码Byte数组到目标编码数组
byte[] shiftEncByte=Encoding.Convert(Encoding.Default,shiftJIS,defEncByte);
//还原转换后的Byte数组到String
string QText=shiftJIS.GetString(shiftEncByte);
kingser 2006-02-24
  • 打赏
  • 举报
回复
----------------------------------
又想了下,你的问题好像可以理解为调用Object对象的ToString方法的时候怎么才能ToString到指定的编码方式而不是默认的编码.
----------------------------------
这句话真是说到我心里去了

刚知道还有Encoding.Convert这个好东西,呵呵,多谢了
做了个例子测试了一下,好像是可以的

以前做asp,程序都是跑在服务器上,编码永远都是相同的
第一次遇到这样情况,让大家见笑了
meixiaofeng 2006-02-24
  • 打赏
  • 举报
回复
当然,你可以选择不同的字符集
kingser 2006-02-23
  • 打赏
  • 举报
回复
应 din100的要求,说明一下我为什么要改这个东西,原帖请参考:
http://community.csdn.net/Expert/TopicView.asp?id=4561047

现在的情况是,按照上贴中的各位高手的说法,我改了nVarchar,也在SQL中写上了 N'日文'
但是还是不行
最后我发现只要服务器和客户端的缺省语言设置相同,以上方法就可以用,如果不同就没法用
开始时我们服务器的编码是iso-8859-1,我(客户端)的缺省编码是GB2312,试了各种方法都不行
后来我在控制面板里把系统语言设置成英文,发现以上的方法就可以用了
再后来我又试了把服务器改成中文,客户端也改成中文,也可以用

其实我的需求并不复杂,就是在日本有人会用Shift-JIS的网页提交数据,数据库服务器是英文系统,然后在中国或者其它国家,会有人用exe的客户端连接数据库并读取日文数据
这个客户端的Encode.default可能是各种情况都有,都会装有日文语言包

以前我是做asp的,很少接触windows应用程序,请大家看看这个事情怎么解决比较好
谢谢大家
真相重于对错 2006-02-23
  • 打赏
  • 举报
回复
通过
Thread.CurrentThread.CurrentCulture= new CultureInfo("en");
来设置
速马 2006-02-23
  • 打赏
  • 举报
回复
这就是为啥我不推荐使用Encoding.Default的原因 :-)
我一般会自定义一个全局的App.Encoding静态属性来作为默认编码类型,它可以默认为Encoding.Default,但想改的话还有后悔药可用,嗯
din1001 2006-02-23
  • 打赏
  • 举报
回复
强烈要求楼主公布需求,真的很奇怪啊!什么需求需要改这个东西呢???
hy98521 2006-02-23
  • 打赏
  • 举报
回复
关注
lovefootball 2006-02-23
  • 打赏
  • 举报
回复
这个属性是根据操作系统来的
如果想强制改变它可能得用到API

你为什么要改变它,说说你的理由,也许可以换个思路
JasonHeung 2006-02-23
  • 打赏
  • 举报
回复
你应该根据这个设置来决定显示,而不是编程来修改该设置。
jiezhi 2006-02-23
  • 打赏
  • 举报
回复
这个是操作系统的设置.

我想得使用API了,查查看吧
kingser 2006-02-23
  • 打赏
  • 举报
回复
to: din1001
我现在用的是
QText=Encoding.GetEncoding("Shift-JIS").GetString(Encoding.Default.GetBytes(rs["myText"].ToString()));
添加数据库内容的时候,也用了 N'日文' 的形势
用Encoding.Unicode也试过,情况都是必须服务器和客户端default相同的时候才有效
我认为主要原因是rs["myText"].ToString()这一步已经出了问题
因为ToString的时候,实际上已经调用了缺省编码方式,如果不匹配的话,已经是乱码了

也许按这种方式,在网页中提交的时候,就要使用Unicode提交,而不是用Shift-JIS提交
din1001 2006-02-23
  • 打赏
  • 举报
回复
QText=Encoding.GetEncoding("Shift-JIS").GetString(Encoding.Unicode.GetBytes(rs["myText"].ToString()));

如果数据库里字段用的是nchar、nvarchar 和 ntext看看Unicode编码方式

可以参考下这里边的文章:
http://msdn2.microsoft.com/zh-cn/library/ms190245(SQL.90).aspx

kingser 2006-02-23
  • 打赏
  • 举报
回复
现在服务器端没有写代码,是直接在程序里用帐号密码来连接SQL数据库的
连接以后,用一个sql语句生成data reader对象
就是上面说到的rs["myText"].ToString();中的rs
din1001 2006-02-23
  • 打赏
  • 举报
回复
或者找一下服务器端的的编码方式然后在客户端用同样的编码方式还原成String再用你需要的编码(Shift-JIS)转一下
din1001 2006-02-23
  • 打赏
  • 举报
回复
大概了解你的意思了,看了下你再另外一篇帖子里的那段总结!

/***************
而我在客户端用string QText=rs["myText"].ToString();的时候
这个string已经是被编码过了,所以再用getByte和getString都没有用了
打印了一个测试列表
QText[0]=141;
QText[1]=197;
QText[2]=352;
QText[3]=241;
QText[4]=8218;
和原始的字节流不一样
*****************/

现在的问题就是确定这个string到底是被什么编码方式给编码的。个人认为因该是服务器端的默认编码方式,不知道你的服务器端是什么样的构成,不过以前碰到过一个类似的问题也是因为服务器段发送的时候是用的默认编码方式客户端接收到以后乱码的问题!!解决办法是在服务器段强制一下发送时的编码(java代码)
String CHARACTER_ENCODING = "shift-JIS"
response.setCharacterEncoding(CHARACTER_ENCODING);
客户端
QText=Encoding.GetEncoding("Shift-JIS").GetString(encodedBytes);







110,561

社区成员

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

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

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