2019-11-13 13:47:01 zhao3756 阅读数 31
//将uint64 转为 []bype
func Uint64ToByte(num uint64) []byte{

	var buffer bytes.Buffer

	err := binary.Write(&buffer,binary.BigEndian,num);
	if err != nil {
		log.Panic(err)
	}

	return buffer.Bytes()
}
2009-08-20 11:07:00 dingxy 阅读数 22216

从数据库extract data 保存为csv 文本文件,encoding ='UTF8'

 

用excel默认打开时,中文显示乱码。

 

1.选择合适的excel版本,excel 2003中文版(这个没有试过)

2.用editplus,打开,以Unicode 另存为 。 然后用excel 打开,这时,能看到中文,但是都在一个列,可以在使用 data-->text to column 分列。

3.在写csv 的时候,自己写csv 的 'UTF8'格式的开头,这个也没有试过,不过道理上应该可以 :)

4.参考:


http://www.java2000.net/viewthread.jsp?tid=5380
http://www.java2000.net/viewthread.jsp?tid=7378

 

 

======================上面两篇参考文章如下 =================

<!-- /* Font Definitions */ @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@SimSun"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:SimSun;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} -->

utf8文件的标识字符

 

EF BB BF

Unicode签名 BOM(Byte Order Mark)

 

引用: http://blog.csdn.net/thimin/archive/2007/08/03/1724393.aspx

 

近日在调测一个 UTF8编码的中文 Zen Cart网站时遇到一件怪事,网页显示文字正常,用 ie的察看源文件(记事本打开)却发现乱码, firefox没有这个问题。经在网上多方查证和多次测试,解决了这个问题,其实是 UTF-8文件的 Unicode签名 BOM(Byte Order Mark)问题。

 

BOM(Byte Order Mark),是 UTF编码方案里用于标识编码的标准标记,在 UTF-16里本来是 FF FE,变成 UTF-8就成了 EF BB BF。这个标记是可选的,因为 UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是 UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。

 

微软在自己的 UTF-8格式的文本文件之前加上了 EF BB BF三个字节 , windows上面的 notepad等程序就是根据这三个字节来确定一个文本文件是 ASCII的还是 UTF-8 , 然而这个只是微软暗自作的标记 , 其它平台上并没有对 UTF-8文本文件做个这样的标记。

 

也就是说一个 UTF-8文件可能有 BOM,也可能没有 BOM,那么怎么区分呢?三种方法。 1,用 UltraEdit-32打开文件,切换到十六进制编辑模式,察看文件头部是否有 EF BB BF 2,用 Dreamweaver打开,察看页面属性,看“包括 Unicode签名 BOM”前面是否有个勾。 3,用 Windows的记事本打开,选择 “另存为”,看文件的默认编码是 UTF-8还是 ANSI,如果是 ANSI则不带 BOM

 

我找到 Zen Cart的模版文件中的 html_header.php,发现文件果然不带 BOM,用 UltraEdit-32另存为的方式加上 BOM后,再上传 html_header.php,一切正常。

 

注意用 Convertz gb2312文件转换成 UTF-8文件时,默认设置是不带 BOM的。不带 BOM可能出现上述乱码问题,但是带 BOM,对于 php include文件要小心,会在 php字节流前面多出 EF BB BF,提前输出到显示器有可能会带来程序错误。一个解决方案是凡是被 include的文件都保存为 ANSI,主文件可以是 UTF-8。要想把一个文件去掉 BOM,使用 UlterEdit打开 , 切换到十六进制编辑模式,把最前面三个字节 (就是那该死的 EF BB BF)替换为 20,保存(注意关闭保存时自动备份的功能),再切换到默认编辑模式,把最前面的三个空格去掉就可以了。

 

另外还学到一些编码的小知识:所谓的 unicode保存的文件实际上是 utf-16,只不过恰好跟 unicode的码相同而已 ,但在概念上 unicode utf是两回事, unicode是内存编码表示方案,而 utf是如何保存和传输 unicode的方案。 utf-16还分高位在前 (LE)和高位在后 (BE)两种。官方的 utf编码还有 utf-32,也分 LE BE。非 unicode官方的 utf编码还有 utf-7,主要用于邮件传输。 utf-8的单字节部分是和 iso-8859-1兼容的,这主要是一些旧的系统和库函数不能正确处理 utf-16而被迫出来的,而且对英语字符来说,也节省保存的文件空间(以非英语字符浪费空间为代价)。在 iso-8859-1的时候, utf8 iso-8859-1都是用一个字节表示的,当表示其它字符的时候, utf-8会使用两个或三个字节。

 

 ----------------------------------------------------------------------------------------------------------------

 

工作需要必须创建 UTF-16格式的文件 .这几天在网络上找 ,似乎没有此类话题 ,无论是国外还是国内 .

代码 :

OutputStreamWriter fos = new OutputStreamWriter(new FileOutputStream(new File("c://2.csv")), "UTF-16");

fos.write("你好 ");

fos.flush();

fos.close();

 

生成文件之后 ,我在 windows平台打开 .使用 editeplus是乱码 .使用记事本打开不乱码 ,保存时察看文件编码确是 unicode big endian. 使用写字板打开时乱码 . 使用 excel打开仍然乱码 .

 

我不过 ,使用下面代码 ,就可以顺利创建 UTF-8的文件 .

OutputStreamWriter fos = new OutputStreamWriter(new FileOutputStream(new File("c://2.csv")), "UTF-8");

fos.write("你好 ");

fos.flush();

fos.close();

 

哪位碰到过这个问题 .帮忙看看

 

 

答:一个简单的问题,楼主怎么弄得这么复杂?楼主的问题是:用 UTF-16格式保存汉字,要求在 WINDOW平台使用:写字板、 EXCEL WORD能正常打开且不乱码(尤其是用 EXCEL能打开,用于导入 .csv文件)。很简单啊,用我的代码,保证你 100%成功。

查看复制到剪切板打印

 

   1. OutputStreamWriter fos = new OutputStreamWriter( 

   2.                 new FileOutputStream(new File("c://2.csv")), "UTF-16LE");  

   3. fos.write(0xFEFF);          

   4. fos.write("你好 ");  

   5. fos.flush();  

   6. fos.close(); 

 

OutputStreamWriter fos = new OutputStreamWriter(

                new FileOutputStream(new File("c://2.csv")), "UTF-16LE");

fos.write(0xFEFF);       

fos.write("你好 ");

fos.flush();

fos.close();

 

A:

提示楼主,写一个编码类型的几个字节到文件里,这样虽然能在 Windows下面的某些程序看到,但你的程序下次处理这个程序时,一定要注意这个问题。

前几个字节是有特殊意义的。

 

下面是部分 BOM的介绍

 

UCS 编码中有一个叫做 "ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是 FEFF。而 FFFE UCS中是不存在的字符,所以不应该出现在实际传输中。 UCS规范建议我们在传输字节流前,先传输字符 "ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian的;如果收到 FFFE,就表明这个字节流是 Little- Endian的。因此字符 "ZERO WIDTH NO-BREAK SPACE"又被称作 BOM

UTF-8不需要 BOM来表明字节顺序,但可以用 BOM来表明编码方式。字符 "ZERO WIDTH NO-BREAK SPACE" UTF-8编码是 EF BB BF。所以如果接收者收到以 EF BB BF开头的字节流,就知道这是 UTF-8编码了。

Windows就是使用 BOM来标记文本文件的编码方式的。

 

个人并不建议这样做,因为后患无穷。

 

 

2015-02-23 13:02:47 Youthjack 阅读数 372

1、基本数值数据类型:Java与C++不同,没有long long类型,而多了bype类型。而且Java的long等于C++的long long;

下表来自博主C加加的博客:

C++与Java基本数据类型及所占用内存空间比较
----------------C++------------------------Java----------
(01)01)bool----------------1 byte-----01)boolean--1 byte
(02)02)char----------------1 byte-----02)char-----2 bytes
(03)---signed char---------1 byte     03)byte-----1 byte
(04)---unsigned char-------1 byte
(05)03)wchar_t-------------2 bytes  //char的扩展,一般为16位或32位
(06)04)short---------------2 bytes----04)short----2 bytes
(07)---unsigned short------2 bytes
(08)05)int-----------------4 bytes----05)int------4 bytes
(09)---unsigned int--------4 bytes
(10)06)long----------------4 bytes----06)long-----8 bytes
(11)---unsigned long-------4 bytes
(12)07)long long-----------8 bytes
(13)---unsigned long long--8 bytes
(14)08)float---------------4 bytes----07)float----4 bytes
(15)09)double--------------8 bytes----08)double---8 bytes
(16)10)long double--------12 bytes
----------------------------------------------------------

2、不同于C++,Java的输入需要自己定义,可以定义从控制台输入和从文件中读取
如:java.util.Scanner input = new java.util.Scanner (System.in/file) 前者从控制台,后者从文件

3、强制类型转化
1)、保留小数点后n(以2为例)位: (int)(a*100)/100.0;
2)、char与数值类型:整数转化为char时,取后16位(这说的是Java),如:char ch = (char)OXAB0041;
     浮点数转化为char,先转为int,再转为char,如 char ch = (char)65.25; 
     上述ch结果均为'A';

4、next()和nextline()方法的区别:前者读取以空白字符结束的字符串(' ','\t','\n'等),后者以按下回车键为结束符(即'\n');

5、随机函数
(1)Math.random()
1)、产生两位随机整数: int n = (int)(Math.random()*90+10) //Math.random返回区间[0.0,1.0)中的任意一个数
=> a + Math.random()*b 返回[a,a+b) 内的随机数;
2)、生成随机小写字母: char ch = (char)('a' + Math.random()*('z'-'a'+1));
=> (char)(ch1 + Math.random()*(ch2 - ch1 + 1))  生成ch1到ch2(包括首尾)之间的随机字符;
(2)java.util.Random



6、输入输出重定向
当数据过多时,可以将这些数据用空格隔开,保存在名为input.txt的文本文件中,然后使用指令: 
java x < input.txt; //x是文件的名称,即x.java.
同理,输出重定向将输出给文件output.txt,指令为:
java ClassName > output.txt;
这两条指令也合并在一起使用,如:
java SentineValue < input.txt > output.txt

7、从大到小添加数字没有比从小到大添加数字得到的数值精确,即是在大数之前先增加小数可减少误差;
代码1:先增加大数
import javax.swing.*;
import java.util.*;
import java.awt.Graphics;
public class Main{
	public static void main(String [] args){
		 double sum = 0;
		double a = 1.0;
		for(int i = 0;i<100;i++){
			sum += a;
			a -= 0.01;
		}
		System.out.println(sum);
	}
}
运行结果:50.49999999999995

代码2:先增加小数
import javax.swing.*;
import java.util.*;
import java.awt.Graphics;
public class Main{
	public static void main(String [] args){
		 double sum = 0;
		double a = 0.01;
		for(int i = 0;i<100;i++){
			sum += a;
			a += 0.01;
		}
		System.out.println(sum);
	}
}
运行结果:50.50000000000003

显然代码2更为精确;

8、简便的是10->16进制转化函数
public static String toHex(int dec){
		String hex = "";
		while(dec!=0){
			int t = dec % 16;
			hex += toHexChar(t);
			dec /= 16;
		}
		return hex;
	}
	public static char toHexChar(int n)
	{if(n<10)
		return (char)(n+'0');
	else return (char)(n-10+'A');
		}
	}

10、Math类的五个取整函数

static double ceil(doublea):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储)。

static double floor(doublea):地板函数,返回小于等于a的最大整数(但是以浮点数形式存储)。

static double rint(doublea):四舍五入函数,返回与a的值最相近的整数(但是以浮点数形式存储)。当a为xx.5时,向绝对值小的方向靠拢。   

static long round(doublea):四舍五入函数,返回与a的值最相近的长整型数。(long)(Math.floor(x+0.5));

static int round(floata):四舍五入函数,返回与a的值最相近的整型数。(int)(Math.floor(x+0.5));


11、随意打乱数组元素(洗牌) && for-each循环(即不用下标变量直接遍历整个数组):
import javax.swing.*;
import java.util.*;
import java.awt.Graphics;
public class Main{
	public static void main(String [] args){
		int []a = {1,2,3,4,5,6,7,8,9,10};	
		for(int i=0;i<a.length;i++){
			int index = (int)(Math.random()*a.length);
			int t = a[i];
			a[i] = a[index];
			a[index] = t;
		}
		for(int u:a)
		System.out.println(u);
	}
}
	

12、二分查找法:
public static int BinarySearch(int []a,int key){
	int low =0;
	int high = a.length - 1;
	while(low <= high){
		int mid = (low+high)/2;
		if( a[mid] < key) low = mid + 1;
		else if(a[mid] == key) return mid;
		else high = mid -1;
 	}
	return -low - 1;
}

13、插入排序法
public static void insertionsort(double []a){
		for(int i=1;i<a.length;i++){
		double c = a[i];
		int k;
		for(k=i-1;k>=0&&a[k]>c;k--){
			a[k+1] = a[k];
		}
		a[k+1] = c;
		}
	}

14、Arrays类:1、fill方法:替换整个数组或者部分数组的元素;
      2、sort方法:排序
      3、binarySearch:二分查找
      4、equals:判断数组是否相等






2009-06-16 01:17:04 iteye_17354 阅读数 18

8种原始数据类型,全部为小写字母;
boolean 布尔型 true 或 false

bype 一个字节 -128-127;bype b=125;(符号占一位,)

char 两个字节 0-65535

int 4个字节的整数

long 8个字节的整数

float 4个字节的浮点数(单精度)//浮点数是指小数位数不确定的小数。6-7位精度

double 8个字节的浮点数(双精度)14-15位精度。

char类型补注:

char类型,以单引号包含值,值除了为转义开头的字符,必须单个字符('\u0060','a');

转义字符后面代表4个16进制的数字。0060=6*16=96。96为该字符的unicode编码。

和String 比较:String 变量由 双引号包含字符,String是一个类,不是一个原始类型。和char保存方式有本质区别。

 

强制转换:

例如以64位存储数值和32位存储数值比较,64位是大盒子,32位是小盒子。当大盒子放入小盒子中时采用强制转换 (小盒子)大值;

例:

float fa = 123.02 是错误的,小数类型默认是double型的,要把64位的double 转换成32 位的float.需要进行强制转换,或者在数字末尾加 f或F.

同理,Double fb =123d;(整数默认是int型的。)

 

如果遇到中文不能编译的情况,linux下用locale命令查看本地编码模式。编码,解码需要一个恰当的字符集。

 

 

整数型的数据可以保存 十进制,8进制,16进制。整数值缺省为4个字节。一个大整数超出4个字节。后面加L 或l.

int a = 032;//0开头表示八进制

int b = 0x771;//ox开头表示16进制。

 

 

3种分类(按类型):

a.布尔型 boolean

b.整数型 byte,char,short,int,long

c.小数型 float,double

 

4种分类(按字节)

boolean

1个字节 byte

2个字节 short char

4个字节 int float

8个字节 long double

 

2种分类

布尔型:boolean

数字型:其他7种。

 

 

 

 

2进制,8进制,16进制 位数间的转换。

 

 97位10进制转化成2进制。

1.可以采用 除2取余的方式。

2.分拆为 64+32+1 =》 1000000+100000+0000001

 

byte ba = 0x771;

编译报错,16进制771为(),超出bype一个字节的范围,通过强制转换byte ba=(byte)0x771;

截取后8位。转化10进制:71=》7*16+1=113,或者 0111+0001=113

 

 

 

 

2018-02-20 22:40:18 abc_12366 阅读数 136

继续更新……今天的任务比较轻——本文介绍div指令、dd伪指令、和dup操作符

只有汇编指令才和机器语言一一对应,所谓伪指令、操作符,都是写给编译器看的


div指令

div是除法指令

除数:8位或16位,在寄存器或内存单元中

被除数:(默认)放在AX或DX和AX中

当除数是8位时,被除数是16位(AX);当除数是16位时,被除数是32位(DX+AX)

DIV BYPE PTR DS:[0]
;; (AL)=(AX)/((DS)*16+0)的商
;; (AH)=(AX)/((DS)*16+0)的余数
DIV WORD PTR DS:[0]
;; (AX)=(DX*10000H+AX)/((DS)*16+0)的商
;; (DX)=(DX*10000H+AX)/((DS)*16+0)的余数
;;上面10000H是进制位(如3123上的进制位就是100
DIV BYTE PTR [BX+SI+8];
;; (AL)=(AX)/((DS)*16+(BX)+(SI)+8)的商
;; (AH)=(AX)/((DS)*16+(BX)+(SI)+8)的余数
DIV WORD PTR [BX+SI+8]
;; (AX)=[(DS*10000H+(AX)]/((DS)*16+(BX)+(SI)+8)的商
;; (AX)=[(DS*10000H+(AX)]/((DS)*16+(BX)+(SI)+8)的余数

div指令的关键是分清使用16位还是32位寄存器保存除数和被除数


dd伪指令

dbdw等类似,是写给编译器看的伪指令

dd伪指令用来定义双字(double word),一个双字占4字节


dup操作符

dup操作符和dbdwdd等伪指令配合使用,用来进行数据的重复(解放劳动力)

db 3 dup (0)
;; 定义了3个字节,它们的值都是0相当于 db 0,0,0
db 3 dup (0,1,2)
;; 定义了9个字节,这相当于 db 0,1,2,0,1,2,0,1,2(db后面跟的是重复次数)

个性化插件定义

阅读数 45

java技巧——deep copy

阅读数 2207

没有更多推荐了,返回首页