今天做winform專案列印的時候碰到一個問題,請各位大神指點一下。
一組字串,里面有數字、漢字、中文標點、英文字母。我在列印的時候需要拆分成多行等長顯示。
查詢資料使用下面這段代碼,但是碰到漢字有時候會出現亂碼。
public String[] getstr(string strs,int len)
{
double i = strs.Length;
string[] myarray = new string[int.Parse(Math.Ceiling(i/len).ToString())];
for (int j=0;j < myarray.Length; j++)
{
len = len <= strs.Length ? len : strs.Length;
myarray[j] = strs.Substring(0, len);
strs = strs.Substring(len,strs.Length-len);
}
return myarray;
}
我這里還有一個特殊要求,第一行顯示的長度與其他行不同。其他行顯示長度都一樣。第一行可以根據引數指定長度。請大家幫忙!謝謝!
uj5u.com熱心網友回復:
漢字在.net里也是一個字符,又不會被分隔,怎么會顯示亂碼呢uj5u.com熱心網友回復:

效果是這樣的
uj5u.com熱心網友回復:
輸入是亂碼,輸出就亂碼比如你人家用UTF8,你用GBK
當然你這個代碼里,所謂的等長顯示本身就成問題
12345
一二三四五
看見了么,都是5個字符,他們等長么?
uj5u.com熱心網友回復:
不好意思,剛才代碼錯誤,我用的這個public String[] getstr(string strs,int onelen,int len)
{
byte[] subbyte = System.Text.Encoding.Default.GetBytes(strs);
double i = subbyte.Length;
string[] myarray=new string[int.Parse(Math.Ceiling(i / len).ToString())];
for (int j = 1; j < myarray.Length; j++)
{
len = len <= subbyte.Length ? len : subbyte.Length;
myarray[j] = System.Text.Encoding.Default.GetString(subbyte, 0, len);
strs = System.Text.Encoding.Default.GetString(subbyte, len, subbyte.Length - len);
subbyte = System.Text.Encoding.Default.GetBytes(strs);
}
return myarray;
}
uj5u.com熱心網友回復:
最后這個 就更不應該了。 一個漢字是多位元組,你要隨意拆分位元組更不可能。label 他本來就可以自己換行
uj5u.com熱心網友回復:
如果你是想手動列印分行你的需求其實比你弄的這些代碼都復雜
因為列印字體大多不是等寬字體,第二段代碼不但沒有考慮到位元組流分割后漢字可能被截斷的問題,也沒想到字符本身寬度就不同
要真正手動實作分行,那么需要具體的顯示/列印設備的Graphics來MeasureString獲得真正的寬度
逐個分析字符是否需要被分到下一行
uj5u.com熱心網友回復:
System.Text.Encoding.Default錯誤,uj5u.com熱心網友回復:
Graphics graphics = CreateGraphics();
SizeF sizeF = graphics.MeasureString("aaaaaaaaa", new Font("宋體", 9));
MessageBox.Show(string.Format("字體寬度:{0},高度:{1}", sizeF.Width, sizeF.Height));
試試
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/141544.html
標籤:C#
上一篇:.net Datalist
下一篇:EmguCV訪問圖片像素
