- notice 스킨변경~
[한글깨짐]검색결과, 7건
하지만, 이건 한글은 이제 잘 읽는 것 같은데......한자를 못 읽습니다-_-; 원래 안되는건가....-_-;
우선 ID3Parser 링크입니다. 매우 빠른 속도로 ID3데이터를 가져옵니다.
http://blog.ashier.com/2007/11/08/id3-parser/
여기서 한글을 읽을 수 있게 수정하는 부분이......
보면 ID3데이터를 추출해오는 부분이 있습니다.
거기서 한글로 추출할 수 있게 변경합니다.
private function parseFrames():void {
var id:String = "";
var size:uint = 0;
if(fs.position <length) {
try {
id = fs.readUTFBytes(frameIdSize);
size = fs.readUnsignedInt();
if (version>= 3) {
fs.readByte();
fs.readByte();
}
if(id.match(regEx)) {
var obj:Object = new Object();
obj.encoding = fs.readByte();
obj.text = fs.readUTFBytes(size - 1);
frames[id] = obj;
}
parseFrames();
}catch(e:Error) {}
}
}
이 부분이 있는데요. 한글을 읽어오는 readUTFBytes 부분을 바꿔줍니다.
//obj.text = fs.readUTFBytes(size - 1);
if (obj.encoding == "1")
{
obj.text = StringUtil.trim(fs.readMultiByte(size - 1, "unicode"));
}
else
{
obj.text = StringUtil.trim(fs.readMultiByte(size - 1, "EUC-KR"));
}
보니까 obj.encoding이 1인 값은 unicode로 인코딩 된 것 같아요. obj.encoding이 0인 값은 EUC-KR로...
이렇게 하니까 잘 되네요....가끔 공백을 추출해오고 그래서 trim처리했습니다.
아래글은 ID3v1방식 추출 방법 및 ID3v2의 다른 추출 방식 입니다^^ 참고하세요~
http://mudchobo.tomeii.com/tt/356
우선 ID3v1태그는 음악내용 맨 뒤에 있습니다. 그래서 추출하기는 쉽습니다.
http://cafe.naver.com/flexcomponent.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=10087
flexcomponent에서 혀니님께서 작성하신 글입니다.
그 다음 ID3v2태그는 맨 앞에 있습니다. 또한 이것을 추출하는 방법이 만만치 않습니다-_-;
왜냐하면 이건 뭐 길이도 가변적이고, 태그가 복잡합니다-_-;
그래서 태그를 공부하는 것보다 누가 만들어 놓은 것을 찾는 게 더 빠를 듯하여.....-_-;
구글신님께 부탁드리니 잘 찾아주셨습니다 ^^
http://blog.benstucki.net/?id=3
이것을 그대로 사용하시면 한글이 깨집니다.

저 위에 소스를 다운 받아서 첫번째 ID3v1에서 사용한 방법을 사용합니다.
ID3Reader.as파일에 readTextFrame이라는 함수가 있는데요.
이게 텍스트를 읽어올 때 사용하는 함수인 것 같습니다.
//obj.text = bytes.readUTFBytes(size-1);
obj.text = bytes.readMultiByte(size-1, "EUC-KR");
요렇게 바꿔줍니다-_-;
그런 다음에 실행하면 한글이 잘 나옵니다.

기존에 Actionscript에서 제공하는 Sound클래스에서 추출하는 ID3에서 잘나오는 한글(즉 UTF-8로 인코딩 된 것)은 여기서 읽으면 잘 안나옵니다-_-; 이거 추출하는 프로그램 만드신 분이 잘못 만든건지 잘 모르겠는데요. 확인해봐야할 것 같네요 ㅠ

이거 말고, 요아래 것으로 하면 잘 되네요.
ID3v2추출하는 다른 방법입니다.
http://mudchobo.tomeii.com/tt/357
제 PC에서는 한글로 잘 나왔는데, 실제 옮겨질 서버(Windows Server 2003)에서 돌리면 한글 부분이 물음표(???)로 나오는 현상이 있었습니다.
삽질하다 안되서 그 윈도우서버2003에 이클립스(Eclipse)를 설치했습니다-_-; 그리고, 소스코드를 옮겨놓으니....디폴트가 CP1252로 소스코드가 되어있어서 한글이 다 깨져서 보이더군요. 분명 한글윈도우서버2003인데 이상하더군요. (CP1252는 영문윈도우 코드페이지라는군요).
그래서 강제로 MS949로 바꾸고, 한글로 고쳤습니다.
그리고, 이클립스에서 실행하는 CONSOLE창에서는 제대로 나오는 겁니다.
하지만, 그 실행파일로 실행을 하면 그대로 한글이 깨집니다-_-;
그래서 생각했습니다. 자바를 실행할 때 뭔가 옵션이있다!
그래서 구글신님께 물어보니 이런 실행방법이 있었습니다.
-Dfile.encoding=MS949실행시 인코딩을 정하는 것 같습니다.
java -Dfile.encoding=MS949 ~~~메인클래스명
이렇게 띄우니까 한글이 나오더군요!
젠장 하루종일 삽질했네-_-;

원래 2008년 7월 12일 이라고 나와야하는데-_-; 안 나옵니다.
이게 서버쪽 케릭터셋이랑 클라이언트 케릭터셋이 안맞아서 그런데요. 서버는 한글이 된다면 KOREAN_KOREA.KO16KSC5601이걸로 되어있을껍니다-_-; 저도 오라클은 잘 모르지만 이게 맞는 것 같습니다.
그래서 클라이언트쪽에도 맞춰줘야합니다.
윈도우에 설치하셨다면 NLS_LANG을 추가하면 됩니다. 어디다가 하냐면 레지스트리에다가 합니다.
시작 -> 실행 -> regedit 실행
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
여기로 찾아가서 ORACLE에 오른쪽 버튼 누르고, 새로만들기 -> 문자열값 하고
NLS_LANG이라고 씁시다.
더블클릭해서 값을 KOREAN_KOREA.KO16KSC5601이라고 합시다.
시도는 안해봤는데 환경변수로 지정해도 될 듯 합니다.
NLS_LANG=KOREAN_KOREA.KO16KSC5601

이번에는 클라이언트를 보겠습니다.
참고로 예제로 배우는 플렉스2에 있는 CODE7_13을 참고했습니다.
(틀만 가져다가 썼습니다 ^^)
FLEX3 BETA2에서 테스트해봤습니다.
클라이언트(FLEX)
ChatClient_Flex.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="initApp()">
<mx:Script>
<![CDATA[
private var socket:Socket = new Socket();
[Bindable]
public var userId:String;
private function initApp():void {
currentState = "logon";
}
public function logon():void {
socket = new Socket("127.0.0.1", 10001);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
userId = tUserId.text;
socket.writeUTFBytes(userId + "\n");
socket.flush();
currentState = "chat";
}
private function socketDataHandler(event:ProgressEvent) :void {
var str:String = socket.readUTFBytes(socket.bytesAvailable);
trace(str);
trace("음");
var trimstr:String = str.substr(0, str.indexOf("\r\n"));
log.text += trimstr + "\n";
}
public function send():void {
socket.writeUTFBytes(msg.text + "\n");
socket.flush();
msg.text = "";
}
]]>
</mx:Script>
<mx:Panel id="panel" width="100%" height="100%" verticalAlign="middle"
horizontalAlign="center">
<mx:ControlBar id="cb" height="44" />
</mx:Panel>
<mx:states>
<mx:State name="logon">
<mx:AddChild relativeTo="{panel}">
<mx:HBox>
<mx:Label text="User Id:" />
<mx:TextInput id="tUserId" enter="logon()" />
<mx:Button label="Logon" click="logon()" />
</mx:HBox>
</mx:AddChild>
</mx:State>
<mx:State name="chat">
<mx:SetProperty target="{panel}" name="title"
value="접속자 ID : [{userId}]" />
<mx:AddChild relativeTo="{panel}">
<mx:TextArea id="log" width="100%" height="100%" editable="false"/>
</mx:AddChild>
<mx:AddChild relativeTo="{cb}">
<mx:HBox width="100%" paddingTop="0" paddingBottom="0">
<mx:TextInput id="msg" enter="send()" width="100%" />
</mx:HBox>
</mx:AddChild>
</mx:State>
</mx:states>
</mx:Application>
처음에 소켓이 조금 헷깔렸는데-_-; 이제 좀 알것같네요.
우선 아이디를 입력하고 로그인을 클릭하면 logon함수를 실행하는데 socket에 이벤트리스너를 등록해요.
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
이거를 등록하게 되면, 서버쪽에서 데이터를 받게 되면 이벤트가 발생되는데 socketDatahandler라는 함수를 호출하라는 얘기죠.
서버가 데이터를 던져주게되면 저함수를 호출해서 readUTFBytes를 호출하면 데이터를 받아올 수 있죠.
※readMultiByte(socket.bytesAvailable, "euc-kr") 이렇게하면
서버쪽에서 UTF-8로 안만들어도 되는데요.
UTF-8이 대세기때문에-_-; UTF-8을 활용합시다-_-;


-
chichs
안녕하세요~
블로그에 막 입성한 초보블로거라서 잘몰라 요래저래 하다보니 트랙백이 갔네요;;
요새 플렉스를 열심히 배우고 있어서..ㅎㅎ
이 글을 고대로 퍼가려다가;; (그런건안데나;
암튼.. 좋은정보 감사하구요~ 앞으로 자주 올께요^^-
머드초보
안녕하세요 ^^ 반갑습니다 ^^
저도 시작한지 이제 겨우 9개월밖에 안되서 ^^
저는 트랙백거는거 한 3달만에 터득한 것 같은데 대단하십니다 ^^
글 퍼가셔도 되는데 출처만 남기시면 돼요 ^^
그럼 앞으로 블로그를 잘 이끌어나가세요 ^^
-
-
낭만공돌이
적어주신 예제. 간단하고 이해하기 쉬워서 너무 잘 보았습니다!
다만 한가지 질문이 있는데.
client 단에서 첫번째로 보낸 메시지를 userID 로 받아서 "접속한 사용자의 ID는 xxx 입니다."
라고 뿌려주시는 것 같은데.
저는 아무래도 그 첫번째 메시지가 계속
<policy-file-request/>
인 것 같습니다.
덕분에 첫번째 채팅 메시지가 ID로 인식되는군요 ㅠ
이거 어떻게 해야 해결될까요..
인터넷을 뒤져서
classdomain.xls 파일을 만들라는 조언도 봤는데, 그대로 해도 잘 안되는군요;;;;
ㅠㅠ
혹시 도와주실 수 있을까요...ㅠ-
머드초보
아....무슨얘기인지 잘 모르겠네요-_-;
접속한 아이디라면...아이디를 그냥 서버에 넘겨주면 될듯한데요
서버단에서 처리해야할 듯 합니다 ^^
-
-
-
-
-
-
김경순
고맙습니다. 저도 플랙스 채팅 프로그램을 Client/Server로 만드는 중인데 좋은 자료여서
참고하도록 하겠습니다. 감사합니다. -
-
-

