有个问题请教:
本地有个文本文件,你用记事本打开后,然后把它保存为utf8格式(保存的格式很多,打开记事本可以看看),
另外你用其他编辑器打开原来的文件,例如uedit,然后再保存为utf8格式,
正常认为这两个保存的utf8文件是一样,
但是这两个文件不一样,前者保存的文件是双字节的,后者是单字节的
请问有什么办法来控制马?
utf8还分签名和非签名两种
其中非签名的是存单字节的,那么怎么样才能统一呢
简单的例子:
你写一个文本:123样例
你保存成记事本中的可以保存的文件,下面以utf8举例
你保存的这个文件,你用程序上传服务器,通常的是INPUT FILE那个控件,
当你上传到服务器后,你会发现:123样例中的1的长度是2,也就是双字节造成的
如果你不用记事本编辑,用uedit编辑,保存utf8,这样他默认的单字节,
上传后,你会发现:123样例中的1的长度是1
你不能保证用户用什么编辑器,
请问,一般这种情况怎么解决呢
欢迎讨论,谢谢。
20 个解决方案
#1
没细究过,和你一起关注
#2
推荐你看一下webcast里邵志东讲的那个asp.net编码课程!
大概还是要做转换的吧?
大概还是要做转换的吧?
#3
jf算了
#4
帮你顶了
#5
通过notepad和uedit存相同内容后在本地是否一样呢
#6
是不是在C#里作一下转换?utf8的中文字符是占3个字符么?
#7
造成这个现象,明显不应该是你程序应该处理的,因为你也说了inputfile无法分辨文件的来源,到底是通过notepad编写还是uedit编写,它只是按照保留文件原样上传到服务器中。由此可见造成文件差异的原因是对相同内容编写,notepad所产生的文件不同于uedit所产生的,至少在文件头上可能是不同的。
#8
up
#9
Knight94(愚翁) ( ) 信誉:110 2006-08-23 08:11:00 得分: 0
造成这个现象,明显不应该是你程序应该处理的,因为你也说了inputfile无法分辨文件的来源,到底是通过notepad编写还是uedit编写,它只是按照保留文件原样上传到服务器中。由此可见造成文件差异的原因是对相同内容编写,notepad所产生的文件不同于uedit所产生的,至少在文件头上可能是不同的。
文件头会有两个字节来记录文件的格式的(我猜得,估计那就是纪录文件格式,呵呵),
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
造成这个现象,明显不应该是你程序应该处理的,因为你也说了inputfile无法分辨文件的来源,到底是通过notepad编写还是uedit编写,它只是按照保留文件原样上传到服务器中。由此可见造成文件差异的原因是对相同内容编写,notepad所产生的文件不同于uedit所产生的,至少在文件头上可能是不同的。
文件头会有两个字节来记录文件的格式的(我猜得,估计那就是纪录文件格式,呵呵),
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
#10
这个感觉做一个编辑器阿,不是做业务程序
#11
mark
#12
帮顶
#13
utf8 对ascII是单字节存储,后边的双字节,汉字三字节。:)
#14
to 文件头会有两个字节来记录文件的格式的(我猜得,估计那就是纪录文件格式,呵呵),
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
你可以通过如下的方式来判断一下Encoding具体是什么
using( StreamReader sr = new StreamReader( yourFile ) )
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
你可以通过如下的方式来判断一下Encoding具体是什么
using( StreamReader sr = new StreamReader( yourFile ) )
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
#15
InputStreamReader isr=new InputStreamReader(in);
isr.getEncoding()
java中是这样吗
isr.getEncoding()
java中是这样吗
#16
to java中是这样吗
java我不熟
:(
java我不熟
:(
#17
目前我的解决方法是这样的,读的时候bytes,一旦发现前两个字节是负数的话,就跳过去,不读,编码改称utf-8,呵呵,这样就没问题,
因为正常情况下,byte都是正数,只有最前面的是标志,是负数。
因为正常情况下,byte都是正数,只有最前面的是标志,是负数。
#18
用using( StreamReader sr = new StreamReader( yourFile ) )
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
读的话,是机器默认的编码ms932,对于文件的保存编码还是不可以。
不过还是谢谢哦,目前还是跳过不读,呵呵
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
读的话,是机器默认的编码ms932,对于文件的保存编码还是不可以。
不过还是谢谢哦,目前还是跳过不读,呵呵
#19
如果存的时候都采用unicode呢,是否要简便些
#20
window下转是有可能产生乱码的,但是在window下看不到.
到unix下打开该文件可以看到文件乱码.
到unix下打开该文件可以看到文件乱码.
#21
#1
没细究过,和你一起关注
#2
推荐你看一下webcast里邵志东讲的那个asp.net编码课程!
大概还是要做转换的吧?
大概还是要做转换的吧?
#3
jf算了
#4
帮你顶了
#5
通过notepad和uedit存相同内容后在本地是否一样呢
#6
是不是在C#里作一下转换?utf8的中文字符是占3个字符么?
#7
造成这个现象,明显不应该是你程序应该处理的,因为你也说了inputfile无法分辨文件的来源,到底是通过notepad编写还是uedit编写,它只是按照保留文件原样上传到服务器中。由此可见造成文件差异的原因是对相同内容编写,notepad所产生的文件不同于uedit所产生的,至少在文件头上可能是不同的。
#8
up
#9
Knight94(愚翁) ( ) 信誉:110 2006-08-23 08:11:00 得分: 0
造成这个现象,明显不应该是你程序应该处理的,因为你也说了inputfile无法分辨文件的来源,到底是通过notepad编写还是uedit编写,它只是按照保留文件原样上传到服务器中。由此可见造成文件差异的原因是对相同内容编写,notepad所产生的文件不同于uedit所产生的,至少在文件头上可能是不同的。
文件头会有两个字节来记录文件的格式的(我猜得,估计那就是纪录文件格式,呵呵),
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
造成这个现象,明显不应该是你程序应该处理的,因为你也说了inputfile无法分辨文件的来源,到底是通过notepad编写还是uedit编写,它只是按照保留文件原样上传到服务器中。由此可见造成文件差异的原因是对相同内容编写,notepad所产生的文件不同于uedit所产生的,至少在文件头上可能是不同的。
文件头会有两个字节来记录文件的格式的(我猜得,估计那就是纪录文件格式,呵呵),
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
#10
这个感觉做一个编辑器阿,不是做业务程序
#11
mark
#12
帮顶
#13
utf8 对ascII是单字节存储,后边的双字节,汉字三字节。:)
#14
to 文件头会有两个字节来记录文件的格式的(我猜得,估计那就是纪录文件格式,呵呵),
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
你可以通过如下的方式来判断一下Encoding具体是什么
using( StreamReader sr = new StreamReader( yourFile ) )
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
有什么方法来根据那两个字节判断是什么格式呢?
那就可以在程序中解析了
你可以通过如下的方式来判断一下Encoding具体是什么
using( StreamReader sr = new StreamReader( yourFile ) )
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
#15
InputStreamReader isr=new InputStreamReader(in);
isr.getEncoding()
java中是这样吗
isr.getEncoding()
java中是这样吗
#16
to java中是这样吗
java我不熟
:(
java我不熟
:(
#17
目前我的解决方法是这样的,读的时候bytes,一旦发现前两个字节是负数的话,就跳过去,不读,编码改称utf-8,呵呵,这样就没问题,
因为正常情况下,byte都是正数,只有最前面的是标志,是负数。
因为正常情况下,byte都是正数,只有最前面的是标志,是负数。
#18
用using( StreamReader sr = new StreamReader( yourFile ) )
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
读的话,是机器默认的编码ms932,对于文件的保存编码还是不可以。
不过还是谢谢哦,目前还是跳过不读,呵呵
{
Debug.WriteLine( sr.CurrentEncoding.EncodingName );
}
读的话,是机器默认的编码ms932,对于文件的保存编码还是不可以。
不过还是谢谢哦,目前还是跳过不读,呵呵
#19
如果存的时候都采用unicode呢,是否要简便些
#20
window下转是有可能产生乱码的,但是在window下看不到.
到unix下打开该文件可以看到文件乱码.
到unix下打开该文件可以看到文件乱码.