NOTICE 
fusion chart 를 사용하다 보니, eclipse 에서 작성된 UTF-8문서의 한글을 제대로 인식하지 못하는 경우가 생겨서 짜증 좀 부리면서 조사해 봤더니만..

Adobe.com 의 flash 보안변경사항에 아래와 같은 내용이 있더구만..
....
Flash Player는 이 파일의 시작 부분에서 유니코드 BOM(Byte Order Mark: 바이트 순서 표시 문자)을 찾아 UTF-8 및 UTF-16 BOM을 인식하고 파일의 나머지를 UTF-8 또는 UTF-16으로 처리합니다. (예를 들어 Windows 메모장과 Mac TextEdit에서 BOM을 포함하는 유니코드 텍스트 파일을 작성할 수 있으며 다른 여러 가지 텍스트 편집기에서도 동일한 작업을 수행할 수 있습니다.) FlashPlayerTrust 파일의 시작 부분에서 BOM을 찾지 못하면 해당 파일이 컴퓨터의 현재 "코드 페이지"(기본 로컬 인코딩)을 사용하는 것으로 해석됩니다.
...

그러니까  flash 기반의 fusion chart 에서 UTF-8 XML 파일을 불러올 때 BOM이 없으면 클라이언트의 default charset (윈도우의 경우 cp949겠지?) 로 가져온다 이거지..

열받아서..  XML 문서를 notepad 에 붙여서 UTF-8로 저장하니까.. BOM이 철썩 달라붙어서 인식이 잘 된다 이거야..

eclipse 에서도 BOM이 있으면 BOM 딱지가 있는 파일로 인식하더라구. eclipse 에서는 기본으로 BOM을 빼고 저장하는 것 같은데.. 일단.. FusionChart 에서는 BOM없는 UTF-8에서는 한글 못쓴다 이거야.. 

나는.. FusionChart 가 쓰는 XML파일은 모두 notepad 에서 BOM딱지 붙여서 다시 보내서 해결봤어.
server.cs
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections;

public class Server {
		  private static void Main(string[] args) {
		  		IPAddress address = IPAddress.Parse("10.0.15.20");
		  		TcpListener server = new TcpListener(address,7771);
					server.Start();
					Console.WriteLine("server started..");

					for(;;) {
						Socket sock = server.AcceptSocket();
						if(sock.Connected) {
							Console.WriteLine(sock.RemoteEndPoint);

							NetworkStream nStream = new NetworkStream(sock);
							byte[] buffer = new byte[1024];
							int receivedData;

							MemoryStream mStream = new MemoryStream();

							do {
									  receivedData = nStream.Read(buffer, 0, buffer.Length);
									  mStream.Write(buffer, 0, receivedData);
							} while(nStream.DataAvailable);

							BinaryFormatter bf = new BinaryFormatter();
							mStream.Seek(0, SeekOrigin.Begin);
							ArrayList a = (ArrayList)bf.Deserialize(mStream);	

							Console.WriteLine(a[0].ToString()+" and "+a[1].ToString());

							mStream.Close();
							nStream.Close();
				}
			}
	  }

client.cs
using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
using System.Net;
using System.Net.Sockets;

public class Program {
		  private static void Main(string[] args) {
					 ArrayList a = new ArrayList();
					 a.Add("Jinsuk");
					 a.Add("경애");

					 MemoryStream m = serialize(a);
					 m.Seek(0, SeekOrigin.Begin);

					 byte[] buffer = new byte[1024];
					 buffer = m.ToArray();

					 TcpClient client = new TcpClient("10.0.15.20", 7771);
					 NetworkStream nStream = client.GetStream();
					 nStream.Write(buffer, 0, buffer.Length);

					 nStream.Close();
					 client.Close();

					 //BinaryFormatter bf = new BinaryFormatter();
					 //ArrayList b = (ArrayList)bf.Deserialize(m);
					 //Console.WriteLine(b[0].ToString());
		  }

		  private static MemoryStream serialize(ArrayList arr) {
					 BinaryFormatter bf = new BinaryFormatter();
					 MemoryStream mStream = new MemoryStream();

					 bf.Serialize(mStream, arr);
					 return mStream;
		  }
}

  
트랙백 0  |  댓글   |
Cyberlink H264 codec 를 VISTA에 설치할 경우, VISTA의 UAC기능을 끄고 설치해야 정상적으로 설치된다.

regsvr32 /u [PATH]\h264dec.ax
 이전  1234   다음 

최근댓글
최근트랙백
fotowall :: ncloud RSS Feeds today : 0   yesterday : 0
total : 4,209