在解决了这个问题之后出现了新的问题!
由于ascii编码下边汉字是两位,所以我用default成功读取出来字符串以后,由于汉字只占一位了,所以字符串缩短了!以前是134位的话,现在可能是129或者更少,总之小于134!这该怎么解决呀?我要按位置来截取字符串,缩短了的话就不能得到正确的信息了!高手帮帮忙!
8 个解决方案
#1
.length
#2
try:
using System;
class Test{
static void Main(){
string s = "汉字hehe";
Console.WriteLine(GetStringCount(s));
Console.WriteLine(s[getRightIndex(s,7)]);
}
private static int getRightIndex(string s,int index){
if(index <= 0) return index;
int re = 0;
foreach(char c in s){
if(IsChinese(c.ToString()))
index -= 2;
else
index--;
re++;
if(index == 0) return re;
else
if(index == -1) return re - 1;
else continue;
}
return -1;
}
private static int GetStringCount(string s){
int count = 0;
foreach(char c in s)
if(IsChinese(c.ToString()))
count += 2;
else
count++;
return count;
}
private static bool IsChinese(string str)
{
return (int)str[0] >= 0x4E00 && (int)str[0] <= 0x9FA5;
}
}
using System;
class Test{
static void Main(){
string s = "汉字hehe";
Console.WriteLine(GetStringCount(s));
Console.WriteLine(s[getRightIndex(s,7)]);
}
private static int getRightIndex(string s,int index){
if(index <= 0) return index;
int re = 0;
foreach(char c in s){
if(IsChinese(c.ToString()))
index -= 2;
else
index--;
re++;
if(index == 0) return re;
else
if(index == -1) return re - 1;
else continue;
}
return -1;
}
private static int GetStringCount(string s){
int count = 0;
foreach(char c in s)
if(IsChinese(c.ToString()))
count += 2;
else
count++;
return count;
}
private static bool IsChinese(string str)
{
return (int)str[0] >= 0x4E00 && (int)str[0] <= 0x9FA5;
}
}
#3
我现在有什么办法可以...把字符串不带乱码的形式,读取出来,并且每个汉字占2个字节?者能做到么?
#4
private string GetFileContents(string filePath)
{
System.IO.FileStream fs = System.IO.File.OpenRead(filePath);
byte[] file = new Byte[fs.Length];
fs.Read(file,0,Convert.ToInt32(fs.Length));
string s = System.Text.Encoding.Default.GetString(file,0,file.Length);
fs.Close();
return s;
}
{
System.IO.FileStream fs = System.IO.File.OpenRead(filePath);
byte[] file = new Byte[fs.Length];
fs.Read(file,0,Convert.ToInt32(fs.Length));
string s = System.Text.Encoding.Default.GetString(file,0,file.Length);
fs.Close();
return s;
}
#5
剑客兄,你的方法不错,解决了我的问题一半,还有另一半,就是我这个文件是有格式的
我不能一下子全部都读出来!我要一行一行的读取,该怎么做?分不够可以再加!谢谢你!
我不能一下子全部都读出来!我要一行一行的读取,该怎么做?分不够可以再加!谢谢你!
#6
//unicode解码方式下的汉字码
array = System.Text.Encoding.Unicode.GetBytes("啊");
i1 = (short)(array[0] - '\0');
i2 = (short)(array[1] - '\0');
//unicode反解码为汉字
string str = "4a55";
string s1 = str.Substring(0,2);
string s2 = str.Substring(2,4);
int t1 = Convert.ToInt32(s1,16);
int t2 = Convert.ToInt32(s2,16);
array[0] = (byte)t1;
array[1] = (byte)t2;
string s = System.Text.Encoding.Unicode.GetString(array);
array = System.Text.Encoding.Unicode.GetBytes("啊");
i1 = (short)(array[0] - '\0');
i2 = (short)(array[1] - '\0');
//unicode反解码为汉字
string str = "4a55";
string s1 = str.Substring(0,2);
string s2 = str.Substring(2,4);
int t1 = Convert.ToInt32(s1,16);
int t2 = Convert.ToInt32(s2,16);
array[0] = (byte)t1;
array[1] = (byte)t2;
string s = System.Text.Encoding.Unicode.GetString(array);
#7
trouble remains~~~~~
用default读出来的字符串虽然没有乱码,但是位数不对了!比如
E2WPW02 300000000000021801500000900000803 万向配件 01 <-
到箭头为止应该是134(非unicode)因为汉字有2位!
但是用default读出来以后就变短了因为汉字只有1位了!问题回到了最初!
在不出现乱码的情况下!汉字占2位,一行一行的读取近来!
我都不好意思了!可是这个问题真的很难说清楚,我估计这次应该清楚了吧!
用default读出来的字符串虽然没有乱码,但是位数不对了!比如
E2WPW02 300000000000021801500000900000803 万向配件 01 <-
到箭头为止应该是134(非unicode)因为汉字有2位!
但是用default读出来以后就变短了因为汉字只有1位了!问题回到了最初!
在不出现乱码的情况下!汉字占2位,一行一行的读取近来!
我都不好意思了!可是这个问题真的很难说清楚,我估计这次应该清楚了吧!
#8
我再把问题说一边换个方式,我要读取的字符串是已知的134位!并包括汉字!为ascii!
那么我现在在程序里要这样得到,仍然为134位!汉子正常显示。每个汉字占2个字节!
over!
谁来救救我?观世音,如来?上帝?
那么我现在在程序里要这样得到,仍然为134位!汉子正常显示。每个汉字占2个字节!
over!
谁来救救我?观世音,如来?上帝?
#1
.length
#2
try:
using System;
class Test{
static void Main(){
string s = "汉字hehe";
Console.WriteLine(GetStringCount(s));
Console.WriteLine(s[getRightIndex(s,7)]);
}
private static int getRightIndex(string s,int index){
if(index <= 0) return index;
int re = 0;
foreach(char c in s){
if(IsChinese(c.ToString()))
index -= 2;
else
index--;
re++;
if(index == 0) return re;
else
if(index == -1) return re - 1;
else continue;
}
return -1;
}
private static int GetStringCount(string s){
int count = 0;
foreach(char c in s)
if(IsChinese(c.ToString()))
count += 2;
else
count++;
return count;
}
private static bool IsChinese(string str)
{
return (int)str[0] >= 0x4E00 && (int)str[0] <= 0x9FA5;
}
}
using System;
class Test{
static void Main(){
string s = "汉字hehe";
Console.WriteLine(GetStringCount(s));
Console.WriteLine(s[getRightIndex(s,7)]);
}
private static int getRightIndex(string s,int index){
if(index <= 0) return index;
int re = 0;
foreach(char c in s){
if(IsChinese(c.ToString()))
index -= 2;
else
index--;
re++;
if(index == 0) return re;
else
if(index == -1) return re - 1;
else continue;
}
return -1;
}
private static int GetStringCount(string s){
int count = 0;
foreach(char c in s)
if(IsChinese(c.ToString()))
count += 2;
else
count++;
return count;
}
private static bool IsChinese(string str)
{
return (int)str[0] >= 0x4E00 && (int)str[0] <= 0x9FA5;
}
}
#3
我现在有什么办法可以...把字符串不带乱码的形式,读取出来,并且每个汉字占2个字节?者能做到么?
#4
private string GetFileContents(string filePath)
{
System.IO.FileStream fs = System.IO.File.OpenRead(filePath);
byte[] file = new Byte[fs.Length];
fs.Read(file,0,Convert.ToInt32(fs.Length));
string s = System.Text.Encoding.Default.GetString(file,0,file.Length);
fs.Close();
return s;
}
{
System.IO.FileStream fs = System.IO.File.OpenRead(filePath);
byte[] file = new Byte[fs.Length];
fs.Read(file,0,Convert.ToInt32(fs.Length));
string s = System.Text.Encoding.Default.GetString(file,0,file.Length);
fs.Close();
return s;
}
#5
剑客兄,你的方法不错,解决了我的问题一半,还有另一半,就是我这个文件是有格式的
我不能一下子全部都读出来!我要一行一行的读取,该怎么做?分不够可以再加!谢谢你!
我不能一下子全部都读出来!我要一行一行的读取,该怎么做?分不够可以再加!谢谢你!
#6
//unicode解码方式下的汉字码
array = System.Text.Encoding.Unicode.GetBytes("啊");
i1 = (short)(array[0] - '\0');
i2 = (short)(array[1] - '\0');
//unicode反解码为汉字
string str = "4a55";
string s1 = str.Substring(0,2);
string s2 = str.Substring(2,4);
int t1 = Convert.ToInt32(s1,16);
int t2 = Convert.ToInt32(s2,16);
array[0] = (byte)t1;
array[1] = (byte)t2;
string s = System.Text.Encoding.Unicode.GetString(array);
array = System.Text.Encoding.Unicode.GetBytes("啊");
i1 = (short)(array[0] - '\0');
i2 = (short)(array[1] - '\0');
//unicode反解码为汉字
string str = "4a55";
string s1 = str.Substring(0,2);
string s2 = str.Substring(2,4);
int t1 = Convert.ToInt32(s1,16);
int t2 = Convert.ToInt32(s2,16);
array[0] = (byte)t1;
array[1] = (byte)t2;
string s = System.Text.Encoding.Unicode.GetString(array);
#7
trouble remains~~~~~
用default读出来的字符串虽然没有乱码,但是位数不对了!比如
E2WPW02 300000000000021801500000900000803 万向配件 01 <-
到箭头为止应该是134(非unicode)因为汉字有2位!
但是用default读出来以后就变短了因为汉字只有1位了!问题回到了最初!
在不出现乱码的情况下!汉字占2位,一行一行的读取近来!
我都不好意思了!可是这个问题真的很难说清楚,我估计这次应该清楚了吧!
用default读出来的字符串虽然没有乱码,但是位数不对了!比如
E2WPW02 300000000000021801500000900000803 万向配件 01 <-
到箭头为止应该是134(非unicode)因为汉字有2位!
但是用default读出来以后就变短了因为汉字只有1位了!问题回到了最初!
在不出现乱码的情况下!汉字占2位,一行一行的读取近来!
我都不好意思了!可是这个问题真的很难说清楚,我估计这次应该清楚了吧!
#8
我再把问题说一边换个方式,我要读取的字符串是已知的134位!并包括汉字!为ascii!
那么我现在在程序里要这样得到,仍然为134位!汉子正常显示。每个汉字占2个字节!
over!
谁来救救我?观世音,如来?上帝?
那么我现在在程序里要这样得到,仍然为134位!汉子正常显示。每个汉字占2个字节!
over!
谁来救救我?观世音,如来?上帝?